多数のファイルに対して複数行の正規表現パターン検索を行っており、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 を他のツールと組み合わせて使用することはできますか?