我有一个值为2022.2.1的字段版本。我需要在所有示例(第一个分隔符之前和之后的字符串)中获得值2022.2。
version="2022.2.1"
echo "${version%.*}"
2022.2这个很管用。但是如果版本包含多个点作为分隔符(例如。( version="2022.2.1.1")它不起作用--我这里需要值2022.2
或者即使版本中包含多个版本,它也不会工作(version="2022.2.1 2021.1.0")。在这个例子中,我只需要第一个值,它的第一个字符串在第一个定界符之前和之后。所以我总是想得到价值2022.2
这个用例的最佳实践是什么?谢谢!
发布于 2022-03-23 13:52:50
通过变量修改,很难做到这一点。在这里,我使用cut来选择前两个.-separated字段(详见man cut ):
for version in '2022.2.1' '2022.2.1.1' '2022.1.1 2021.1.0'
do
shorter=$(cut -d. -f1-2 <<<"$version")
printf "version=%s => %s\n" "$version" "$shorter"
done输出
version=2022.2.1 => 2022.2
version=2022.2.1.1 => 2022.2
version=2022.1.1 2021.1.0 => 2022.1对于没有<<<的POSIX,可以将字符串输送到cut
shorter=$(printf "%s\n" "$version" | cut -d. -f1-2)发布于 2022-03-23 14:05:03
使用zsh:
$ set -o extendedglob
$ print -r -- ${(M)version##[^.]#.[^.]#}
2022.2(M)使扩展导致M的前导部分而不是剥离匹配的部分。
$ print -r -- ${(j[.])${(s[.])version}[1,2]}
2022.2(split on .和join,其中.是前2个结果词)。
POSIXly:
printf '%s\n' "${version%".${version#*.*.}"}"或者:
$ LC_ALL=C expr "x$version" : 'x\([^.]*\.[^.]*\)'
2022.2发布于 2022-03-23 14:10:28
使用简单的bash,您可以:
https://unix.stackexchange.com/questions/696512
复制相似问题