16

如果我想匹配标签中包含的文本及其在 HTML 文件中的结束标签,我应该在命令grep中使用哪个正则表达式?<div class="Message"></div>

4

3 回答 3

13

这是一种使用方法GNU grep

grep -oP '(?<=<div class="Message"> ).*?(?= </div>)' file

如果您的标签跨越多行,请尝试:

< file tr -d '\n' | grep -oP '(?<=<div class="Message"> ).*?(?= </div>)'
于 2012-11-26T14:32:11.477 回答
4

您可以通过指定正则表达式来做到这一点:

grep -E "^<div class=\"Message\">.*</div>$" input_files

并不是说这只会打印在同一行上找到的附件。如果您的标签跨越多行,您可以尝试:

tr '\n' ' ' < input_file | grep -E "^<div class=\"Message\">.*</div>$"
于 2012-11-26T14:15:56.497 回答
3

你不能只用 grep 可靠地做到这一点。您需要使用 HTML 解析器解析 HTML。

如果 HTML 代码有如下内容怎么办:

<!--
<div class="Message">blah blah</div>
-->

你会在那个被注释掉的代码上得到一个错误的命中。以下是一些其他示例,其中仅正则表达式选项会使您失败。

考虑使用XML::GrepPerl 模块中的 xmlgrep,如下所述:使用 grep 提取 html 文件的标题

于 2012-11-26T15:55:24.657 回答