首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash -在第一个分隔符之前和之后使用字符串

bash -在第一个分隔符之前和之后使用字符串
EN

Unix & Linux用户
提问于 2022-03-23 13:40:30
回答 3查看 1.6K关注 0票数 1

我有一个值为2022.2.1的字段版本。我需要在所有示例(第一个分隔符之前和之后的字符串)中获得值2022.2

代码语言:javascript
复制
version="2022.2.1"
echo "${version%.*}"
2022.2

这个很管用。但是如果版本包含多个点作为分隔符(例如。( version="2022.2.1.1")它不起作用--我这里需要值2022.2

或者即使版本中包含多个版本,它也不会工作(version="2022.2.1 2021.1.0")。在这个例子中,我只需要第一个值,它的第一个字符串在第一个定界符之前和之后。所以我总是想得到价值2022.2

这个用例的最佳实践是什么?谢谢!

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2022-03-23 13:52:50

通过变量修改,很难做到这一点。在这里,我使用cut来选择前两个.-separated字段(详见man cut ):

代码语言:javascript
复制
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

输出

代码语言:javascript
复制
version=2022.2.1 => 2022.2
version=2022.2.1.1 => 2022.2
version=2022.1.1 2021.1.0 => 2022.1

对于没有<<<的POSIX,可以将字符串输送到cut

代码语言:javascript
复制
shorter=$(printf "%s\n" "$version" | cut -d. -f1-2)
票数 3
EN

Unix & Linux用户

发布于 2022-03-23 14:05:03

使用zsh

代码语言:javascript
复制
$ set -o extendedglob
$ print -r -- ${(M)version##[^.]#.[^.]#}
2022.2

(M)使扩展导致M的前导部分而不是剥离匹配的部分。

代码语言:javascript
复制
$ print -r -- ${(j[.])${(s[.])version}[1,2]}
2022.2

(split on .join,其中.是前2个结果词)。

POSIXly:

代码语言:javascript
复制
printf '%s\n' "${version%".${version#*.*.}"}"

或者:

代码语言:javascript
复制
$ LC_ALL=C expr "x$version" : 'x\([^.]*\.[^.]*\)'
2022.2
票数 2
EN

Unix & Linux用户

发布于 2022-03-23 14:10:28

使用简单的bash,您可以:

  • 拆分并加入IFS=。阅读-ra字段<<< "$version“ver2=$(IFS=;echo”${field:0:2}“)
  • 正则捕获[[ $version =~ (+.+) ] && ver2=${BASH_REMATCH}
票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/696512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档