如何使用grep匹配HTML特定标签与属性之间的内容?

时间:2012-11-26 14:11:32

标签: regex grep

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

3 个答案:

答案 0 :(得分:8)

这是使用GNU grep的一种方式:

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

如果您的代码跨越多行,请尝试:

< file tr -d '\n' | grep -oP '(?<=<div class="Message"> ).*?(?= </div>)'

答案 1 :(得分:2)

只有grep才能可靠地完成它。您需要使用HTML解析器解析HTML。

如果HTML代码具有以下内容,那该怎么办?

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

你会对这个注释掉的代码进行错误的打击。

考虑使用XML::Grep Perl模块中的xmlgrep,如下所述:Extract Title of a html file using grep

答案 2 :(得分:1)

您可以通过指定正则表达式来执行此操作:

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

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

tr '\n' ' ' < input_file | grep -E "^<div class=\"Message\">.*</div>$"