4

多数のファイルに対して複数行の正規表現パターン検索を行っており、grep から一致を抽出したいとします。デフォルトでは、grep は改行で区切られた一致を出力しますが、複数行のパターンを実行しているため、個々の一致を簡単に抽出できないという不都合が生じます。

grep -rzPIho '}\n\n\w\w\b' | od -a

ファイルツリー内のファイルによっては、次のような出力が得られる場合があります

0000000   }  nl  nl   m   y  nl   }  nl  nl   i   f  nl   }  nl  nl   m
0000020   y  nl   }  nl  nl   m   y  nl   }  nl  nl   i   f  nl   }  nl
0000040  nl   m   y  nl
0000044

ご覧のとおり、一致には改行文字自体が含まれているため、改行で分割してさらに処理するために一致を取得することはできません。

うまくいかないこと

現在、--null(または-Z) は と組み合わせてのみ機能し-lます。これにより、grep は一致ではなくファイル名のみをリストするようになるため、ここでは役に立ちません。

これは、find の -print0 および xargs の -0 スイッチに相当する grep はありますか? の複製ではないことに注意してください。、その質問の要件が異なるため、別の手法を使用して回答することができます。

では、どうすればこれを機能させることができるでしょうか。grep を他のツールと組み合わせて使用​​することはできますか?

4

3 に答える 3

5

そこで、この問題を機能要求として GNU grep バグ メーリング リストに提出したところ、コードのバグのように見えました。

これは修正され、マスターにプッシュされたので、GNU grep の次のリリースで利用できるようになります: http://git.savannah.gnu.org/cgit/grep.git/commit/?id=cce2fd5520bba35cf9b264de2f1b6131304f19d2

要約すると、このパッチは、-zフラグが と連動するだけでなく-l、 とも連動するようにし-oます。

于 2016-03-18T17:04:32.403 に答える