grep正则表达式中的多个条件

时间:2013-10-25 17:59:06

标签: html grep

我想使用grep搜索包含<div的所有行的文件,但我需要<!---->之间的行。< / p>

我有这个正则表达式来查找包含<div^.*\<div.*$

的行

我有这个正则表达式来排除<!---->^((?!\<!--.*?--\>).)*$之间的界限 - 但它不起作用。它仅在评论单行时匹配。我该如何解决这个问题?

如何在一个grep线中组合这些?或者我必须输入两个greps?

1 个答案:

答案 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