Как выполнить grep по HTML с помощью GNU grep 2.12 и bash 4.2.37?

Как выполнить grep по HTML с помощью GNU grep 2.12 и bash 4.2.37?

Я никогда не использовал grep для анализа HTML-файлов, и у меня возникла следующая проблема:

grep -Po "(?s)(<h2>.+?<!-- /endcontent -->)" input.html > output.html
-bash: !--: event not found

Я также попробовал…

grep -Po "(?s)(<h2>.+?\<!-- \/endcontent --\>)" input.html > output.html

… но безрезультатно.

Есть ли способ заставить grep/bash анализировать HTML-файлы или мне следует использовать другое приложение?

Спасибо.


Редактировать: Похоже, что между оболочкой и grep есть какой-то трюк. Поиск точной строки "test" работает, а вот "t.st" и "t.st" не работают. Кто-нибудь знает, почему?


Редактировать: По какой-то причине опция «-P» нарушает регулярное выражение.


Редактировать: Да, опция "-P" требует удвоения символа точки, который обозначает любой символ. Странно.

grep -Po 't..st' input > output

решение1

Попробуйте вместо этого использовать одинарные кавычки ', например:

grep -Po '(?s)(<h2>.+?<!-- /endcontent -->)' input.html > output.html

Grep действует по-другому, когда элементы заключены в двойные кавычки.

Связанный контент