如何使用grep将具有属性的HTML特定标记之间的内容进行匹配?

问题描述 投票:10回答:3

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

regex grep html-parsing
3个回答
8
投票

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

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

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

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

3
投票

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

如果HTML代码具有类似内容,该怎么办:

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

您会在该注释掉的代码上受到误判。这是一些other examples,仅使用正则表达式的选项会使您失败。

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


1
投票

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

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

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

tr '\n' ' ' < input_file | grep -E "^<div class=\"Message\">.*</div>$"
© www.soinside.com 2019 - 2024. All rights reserved.