在bash中的特定子字符串之后提取令牌

hes*_*son 3 bash

假设我在包含几行的 bash 脚本中有一个字符串变量:

blah blah blah
...
...
an interesting parameter: 12345 some other useless stuff...
...
...
Run Code Online (Sandbox Code Playgroud)

我想从这个字符串中提取 12345。我试图寻找使用“一个有趣的参数:”作为“分隔符”的方法,但我无法让它工作。有没有干净的方法来做到这一点?

che*_*ner 5

bash 支持正则表达式匹配,无需使用外部程序。

$ str='
blah blah blah
...
...
an interesting parameter: 12345 some other useless stuff...
...
...'
$ [[ $str =~ an\ interesting\ parameter:\ ([[:digit:]]+) ]]

$ echo ${BASH_REMATCH[1]}
12345
Run Code Online (Sandbox Code Playgroud)

该数组BASH_REMATCH包含元素 0 中的完全匹配项和后续元素中捕获的子组(按从左到右的顺序)。