GNU grep 2.12 と bash 4.2.37 を使用して HTML を grep する方法は?

GNU grep 2.12 と bash 4.2.37 を使用して HTML を grep する方法は?

HTML ファイルを解析するために grep を使用したことがないので、次のような問題が発生しています。

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」オプションでは、任意の文字を表すドット文字を 2 倍にする必要があります。奇妙ですね。

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

答え1

代わりに、次のように一重引用符を使用してみてください'

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

二重引用符で囲まれている場合、Grep の動作は異なります。

関連情報