使用 Bash,如何找到字符串中的第一个数字,然后取出字符串的其余部分?
例如,我有以下字符串 -
SomeText.MoreText.Whatever.1.2.3.4-branch.ext
我希望以此结束——
1.2.3.4-branch.ext
我找到了几个建议如何查找数字的答案(例如这个问题),但没有找到并返回字符串的一部分。
答案1
使用grep
,仅提取匹配部分 ( -o
):
grep -o '[0-9].*'
[0-9]
将匹配第一个数字,并将.*
匹配其余数字
例子:
$ grep -o '[0-9].*' <<<'SomeText.MoreText.Whatever.1.2.3.4-branch.ext'
1.2.3.4-branch.ext
答案2
大多数 POSIX shell 中最简单且可用的方法是:
$ var='SomeText.MoreText.Whatever.1.2.3.4-branch.ext'
$ echo "${var#"${var%%[0-9]*}"}"
1.2.3.4-branch.ext
通过这种方式,不需要调用任何外部实用程序(expr、sed、awk 等),并且也避免了调用此类实用程序的时间消耗(对于短字符串,例如本例中的长字符串(k 的 10 个) shell 非常慢)。