1

我想使用 grep 在文件中搜索包含 的所有行<div,除了我想要和之间<!--的行-->

我有这个正则表达式来查找包含以下内容的行<div:   ^.*\<div.*$

我有这个正则表达式来排除<!---->:   之间的行^((?!\<!--.*?--\>).)*$   - 但它不起作用。仅当注释在一行中时才匹配。我该如何解决?

如何将这些组合在一个 grep 行中?还是我必须输入两个 grep?

4

1 回答 1

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
于 2013-10-25T18:05:37.520 回答