找到第一个数字,然后返回字符串的其余部分

找到第一个数字,然后返回字符串的其余部分

使用 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 非常慢)。

相关内容