我想使用 grep 在文件中搜索包含 的所有行<div
,除了我不想要和之间<!--
的行-->
。
我有这个正则表达式来查找包含以下内容的行<div
: ^.*\<div.*$
我有这个正则表达式来排除<!--
和-->
: 之间的行^((?!\<!--.*?--\>).)*$
- 但它不起作用。仅当注释在一行中时才匹配。我该如何解决?
如何将这些组合在一个 grep 行中?还是我必须输入两个 grep?
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