我想使用grep搜索包含<div
的所有行的文件,但我不需要<!--
和-->
之间的行。< / p>
我有这个正则表达式来查找包含<div
:^.*\<div.*$
我有这个正则表达式来排除<!--
和-->
:^((?!\<!--.*?--\>).)*$
之间的界限 - 但它不起作用。它仅在评论单行时匹配。我该如何解决这个问题?
如何在一个grep线中组合这些?或者我必须输入两个greps?
答案 0 :(得分:1)
grep
不支持多行搜索,例如搜索<!-- ... -->
。这可以通过使用各种帮助程序命令来解决,但在您的情况下,它是不值得的。最好只使用更强大的语言,例如sed或AWK或Perl:
perl -ne '$on = 1 if m/<!--/; $on = "" if m/-->/; print if !$on and m/<div/' FILE
编辑添加:如果您还想在一行上对<!-- ... <div ... -->
的实例进行折扣,则可以写:
perl -ne ' my $line = $_;
if ($in_comment && s/.*?-->//) {
$in_comment = "";
}
while (!$in_comment && s/<!--.*?(-->)?/) {
$in_comment = 1 if $1;
}
print $line if !$in_comment && m/<div/
' FILE