2013-01-01 93 views
1

一個正則表達式時得到匹配的字符串,我有:在bash腳本中調用一個shell腳本

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 

等...但他們都失敗了

的感謝!

回答

2

可以使用BASH_REMATCH陣列來獲取相匹配的部分:

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

${BASH_REMATCH[0]}將包含整個/全​​場比賽(Exx),${BASH_REMATCH[1]}捕獲的第一組(僅此數字)。

+1

只需添加,這裏'REMATCH'不是*重新匹配*而是*正則表達式匹配*。 –

+0

謝謝你,這是我正在尋找的:-) – user1458153