Трудно использовать регулярные выражения в grep - PullRequest
0 голосов
/ 16 октября 2011

Я, вероятно, упускаю что-то действительно очевидное, но у меня есть XML-файл, который мне нужно grep, чтобы увидеть, содержит ли он это:

<phone>null</phone> или <phone></phone>

В любом случае и с любыми дополнительными пробелами (между тегами).

Итак, мое нерабочее решение таково:

grep -i "\<phone\>\s*(null)?\s*\</phone\>" ./myfile.xml

Нокоторый возвращает пустой (даже если файл, который я использую, имеет этот узел).Что я пропускаю?

TIA

Ответы [ 2 ]

1 голос
/ 16 октября 2011

Ах! Нашел ... Я сам отвечу на случай, если кто-нибудь еще найдет это полезным в будущем ... добавив переключатель -P , т.е. ...

grep -i -P "\<phone\>\s*(null)?\s*\</phone\>" ./myfile.xml

... для вызова он использует регулярное выражение в стиле perl (что я и использую) и выдает желаемый результат.

0 голосов
/ 16 октября 2011
kent$  echo "<phone>null</phone> or <phone></phone>foo bar"|grep -iE "(<phone>null</phone>|<phone></phone>)"                             

<phone>null</phone> or <phone></phone>foo bar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...