2016-03-03 96 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