空白を含むgrep出力でxargs grepを実行する方法は?

空白を含むgrep出力でxargs grepを実行する方法は?

正規表現に基づいてファイルを検索し、そのファイルの内容を検索しようとしています。たとえば、次のようなものがあります。

#Find all C++ files that match a certain pattern and then search them
find . -name "*.cpp" | grep "<name regex>" | xargs grep "<content regex>"

私が経験している問題は、いくつかのパスにスペースがあることですxargs。これは引数(および引数)をfind使用します。似たようなものがありますか?-print0-0xargsgrep

それとも私が完全に間違った方向に行っているのでしょうか?素直に言えばfind私にとっては理解grepできますが、xargs grep同じ結果を生成する他の方法にも開いています。

ベストアンサー1

おそらく同様のものを使うことができます(gnu grepの場合)。

grep -r 'content pattern' --include==*.cpp

人々はgrep

--include=GLOB デフォルト名が GLOB と一致するファイルのみを検索します (--exclude で説明されているようにワイルドカード一致を使用)。

空の区切り記号のオプションも参照してください。

-Z、--null通常、ファイル名の後に続く文字の代わりに0バイト(ASCII NUL文字)を出力します。たとえば、grep -lZは通常の改行ではなく各ファイル名の後にゼロバイトを出力します。このオプションを使用すると、ファイル名に改行などの珍しい文字が含まれていても出力が明確になります。このオプションは、find -print0、perl -0、sort -z、xargs -0などのコマンドと共に使用して、任意のファイル名、改行文字を含むファイル名を処理することもできます。

-z、--null-data入力を行セットとして扱い、各行は改行文字ではなく0バイト(ASCII NUL文字)で終わります。 -Zまたは--nullオプションと同様に、このオプションはsort -zなどのコマンドと一緒に使用して任意のファイル名を処理できます。

おすすめ記事