2016-03-03 4 views
1

Я пытаюсь использовать регулярное выражение в сценарии оболочки, чтобы найти подстроку.Bash: регулярное выражение для нахождения шаблона с двойными кавычками

Оригинальная строка:

"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" 

Может ли кто-нибудь помочь в поиске шаблона с двойными кавычками с использованием регулярного выражения?

Bash версия: 4.1.2 (1) -релиз

ответ

2

Если вы хотите, чтобы соответствовать все выражение scan-enabled="true" или scan-enabled="false", то вы можете попробовать это:

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

Переменная ${BASH_REMATCH[1]} будет соответствовать первому совпадение группы захвата в регулярном выражении. В этом случае все регулярное выражение содержится в скобках, так что это первая группа захвата.

Вы можете исследовать это регулярное выражение по этой ссылке:

Regex101

+0

Спасибо за усилия Biegeleisen @ Тим. Я пытаюсь использовать это, reg = 'scan-enabled = \ ". * \"' [["$ str" = ~ $ reg]] && echo $ BASH_REMATCH, но он все равно возвращает "scan-enabled =" true scan-interval = «0» « – apgp88

+0

№ Если вы используете' $ BASH_REMATCH', я считаю, что он всегда будет давать всю строку ввода. –

+0

Ох, проблема с разрешением сканирования может иметь любое значение, и я хочу захватить все это. Я использую регулярное выражение 'scan-enabled = \'. * \ "' – apgp88