【发布时间】:2012-11-14 00:45:35
【问题描述】:
如果我想匹配 HTML 文件中标签 <div class="Message"> 及其结束标签 </div> 中包含的文本,我应该在命令 grep 中使用哪个正则表达式?
【问题讨论】:
标签: regex grep html-parsing
如果我想匹配 HTML 文件中标签 <div class="Message"> 及其结束标签 </div> 中包含的文本,我应该在命令 grep 中使用哪个正则表达式?
【问题讨论】:
标签: regex grep html-parsing
您可以通过指定正则表达式来做到这一点:
grep -E "^<div class=\"Message\">.*</div>$" input_files
并不是说这只会打印在同一行找到的附件。如果您的标签跨越多行,您可以尝试:
tr '\n' ' ' < input_file | grep -E "^<div class=\"Message\">.*</div>$"
【讨论】:
test.txt' Try tr --help' 了解更多信息。
tr '\n' ' ' < test.txt
这是使用GNU grep的一种方式:
grep -oP '(?<=<div class="Message"> ).*?(?= </div>)' file
如果您的标签跨越多行,请尝试:
< file tr -d '\n' | grep -oP '(?<=<div class="Message"> ).*?(?= </div>)'
【讨论】:
tr -d '\r\n' 用于 windows 换行符
你不能只用 grep 可靠地做到这一点。您需要使用 HTML 解析器来解析 HTML。
如果 HTML 代码有类似的内容怎么办:
<!--
<div class="Message">blah blah</div>
-->
你会在那个被注释掉的代码上得到一个错误的命中。这里有一些other examples,其中一个纯正则表达式选项会让你失败。
考虑使用 XML::Grep Perl 模块中的 xmlgrep,如下所述:Extract Title of a html file using grep
【讨论】: