从shell脚本调用regexp时获取匹配的字符串

时间:2013-01-01 11:45:28

标签: regex bash shell

在bash脚本中,我有:

mkv="xxxx E05 xxxx"

if [[ $mkv =~ E[0-9]{2} ]] ; then echo FOUND; fi

好。这告诉我$ mkv是否与E [0-9] {2}匹配,但这不是我想要的。

我想获得匹配的字符串(即我的例子中的05)

我在我的正则表达式中放了一个引用(),希望我以后能够得到它,但我不能。

我试过了:

if [[ $mkv =~ E([0-9]{2}) ]] ; then echo FOUND $1; fi

if [[ $mkv =~ E([0-9]{2}) ]] ; then echo FOUND \1; fi

等...但是所有这些都失败了

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用BASH_REMATCH数组来获取匹配的部分:

if [[ $mkv =~ E([0-9]{2}) ]] ; then echo FOUND ${BASH_REMATCH[1]} ; fi

${BASH_REMATCH[0]}将包含完整匹配(Exx),${BASH_REMATCH[1]}第一个捕获的组(仅限此处的数字)。