如果我想匹配标签中包含的文本及其在 HTML 文件中的结束标签,我应该在命令grep中使用哪个正则表达式?<div class="Message">
</div>
问问题
41153 次
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::Grep
Perl 模块中的 xmlgrep,如下所述:使用 grep 提取 html 文件的标题
于 2012-11-26T15:55:24.657 回答