Я никогда не использовал 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 действует по-другому, когда элементы заключены в двойные кавычки.