如何使用bash将OUTPUT值的正则表达式匹配分配给变量?

时间:2014-03-21 22:43:58

标签: regex bash

我当前的$OUTPUT值是:

Updating (122 files)

在这种情况下,我想捕获122并将其分配给变量。

我正在考虑使用像\d*这样的正则表来捕获数字,但是我不清楚在bash中使用正则表达式的语法。

3 个答案:

答案 0 :(得分:2)

只需使用parameter expansion

$ output='Updating (122 files)'
$ output="${output##*(}"
$ output="${output%% *}"
$ echo "$output"
122

如果您需要更灵活的匹配,可以调整模式。

答案 1 :(得分:2)

使用正则表达式

$ regex="Updating \(([[:digit:]]+) files\)"
$ [[ $OUTPUT =~ $regex ]]
$ echo ${BASH_REMATCH[1]}
122

在这种情况下,有足够的上下文可以将正则表达式简化为

regex="Updating \((.*) files\)"

答案 2 :(得分:1)

我会用sed:

OUTPUT=$(echo $OUTPUT| sed 's/[^0-9]//g')
例如,

删除所有非数字字符。