2016-03-03 84 views
1

我想使用正則表達式在我的shell腳本中找到的子字符串。擊:正則表達式查找模式有雙引號

原始字符串:

"relative-to="jboss.server.base.dir" scan-enabled="true" scan-interval="0"" 

試圖找到以下子:

"scan-enabled="true"" 

代碼:

str="relative-to=\"jboss.server.base.dir\" scan-enabled=\"true\" scan-interval=\"0\"" 
reg='scan-enabled.*"' 
[[ "$str" =~ $reg ]] && echo $BASH_REMATCH 

,但它返回,

scan-enabled="true" scan-interval="0" 

可有人請就如何搜索涉及使用正則表達式雙引號的模式幫助嗎?

猛砸版本:4.1.2(1)-release

回答

2

如果你想匹配整個表達式scan-enabled="true"scan-enabled="false",那麼你可以試試這個:

reg='(scan-enabled=\"[^"]*\")' 
[[ "$str" =~ $reg ]] && echo ${BASH_REMATCH[1]} 

變量${BASH_REMATCH[1]}將匹配第一在正則表達式中捕獲組匹配。在這種情況下,整個正則表達式包含在括號中,所以這是第一個捕獲組。

您可以在此鏈接探索這個表達式:

Regex101

+0

感謝您的努力@Tim Biegeleisen。我想用這個,REG = '掃描啓用= \ 「* \」' [[ 「$ STR」=〜$ REG] &&回聲$ BASH_REMATCH,但它仍然會返回 「已啓用掃描=」 真掃描間隔=「0」 「 – apgp88

+0

號如果你使用'$ BASH_REMATCH'我相信它會一直給整個輸入字符串。 –

+0

喔,問題是可以有任何值掃描啓用的,我想抓住這一切。因此。我使用正則表達式「掃描啓用= \‘* \’」 – apgp88