1

grep を使用して、 を含むすべての行をファイルから検索したいのですが、との間の行は<div必要ありません<!---->

次を含む行を見つけるために、この正規表現があります<div。   ^.*\<div.*$

<!---->:   の間の行を除外するこの正規表現があります^((?!\<!--.*?--\>).)*$   が、機能しません。コメントが 1 行の場合にのみ一致します。どうすれば修正できますか?

これらを1つのgrep行にまとめるにはどうすればよいですか? または、2 つの 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

追加するために編集:のインスタンスを 1 行で割引したい場合は<!-- ... <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 に答える