如果我想匹配HTML文件中标签<div class="Message">
和其结束标签</div>
中包含的文本,我应该与命令grep一起使用哪个正则表达式?
这是使用GNU grep
的一种方法:
grep -oP '(?<=<div class="Message"> ).*?(?= </div>)' file
如果您的标签跨越多行,请尝试:
< file tr -d '\n' | grep -oP '(?<=<div class="Message"> ).*?(?= </div>)'
仅使用grep不能可靠地做到这一点。您需要使用HTML解析器来解析HTML。
如果HTML代码具有类似内容,该怎么办:
<!--
<div class="Message">blah blah</div>
-->
您会在该注释掉的代码上受到误判。这是一些other examples,仅使用正则表达式的选项会使您失败。
考虑使用XML::Grep
Perl模块中的xmlgrep,如此处所述:Extract Title of a html file using grep
您可以通过指定正则表达式来做到这一点:
grep -E "^<div class=\"Message\">.*</div>$" input_files
不是,这只会打印在同一行上找到的机箱。如果您的标签跨越多行,则可以尝试:
tr '\n' ' ' < input_file | grep -E "^<div class=\"Message\">.*</div>$"