如何使用 GNU grep 2.12 和 bash 4.2.37 通过 HTML 进行 grep?

如何使用 GNU grep 2.12 和 bash 4.2.37 通过 HTML 进行 grep?

我从未使用过 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 文件,或者我应该使用其他应用程序?

谢谢。


编辑:shell 和 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 的行为会有所不同。

相关内容