#regex #grep
#регулярное выражение #grep
Вопрос:
Вероятно, я упускаю что-то действительно очевидное, но у меня есть XML-файл, который мне нужно просмотреть, чтобы увидеть, содержит ли он это:
<phone>null</phone>
или <phone></phone>
В любом случае и с любыми дополнительными пробелами (между тегами).
Итак, мое нерабочее решение заключается в следующем:
grep -i "<phone>s*(null)?s*</phone>" ./myfile.xml
Но это возвращает пустое значение (даже если файл, который я использую, имеет этот узел).
Что я упускаю из виду?
TIA
Комментарии:
1. Если вы вводите то, что у вас есть, тогда ваше регулярное выражение должно работать. Я протестировал ваше регулярное выражение с помощью grep, и оно совпало в обоих случаях.
2. да… Мне пришлось добавить -P, мой сервер не должен быть настроен на использование регулярного выражения perl по умолчанию … недостаточно знаю об этом, чтобы размышлять дальше.
Ответ №1:
Ах! Нашел это… Я отвечу на это сам на случай, если кто-нибудь еще сочтет это полезным в будущем … добавив -P переключатель ie…
grep -i -P "<phone>s*(null)?s*</phone>" ./myfile.xml
…для вызова он использует regex в стиле perl (который я использую) и выдает желаемый результат.
Ответ №2:
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
Комментарии:
1. Кент, я понял это, спасибо… но ваше решение не использует регулярные выражения и не проверяет наличие возможных пустых мест вокруг (вместо) null. Хотя спасибо.