正規表現に基づいてファイルを検索し、そのファイルの内容を検索しようとしています。たとえば、次のようなものがあります。
#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
-0
xargs
grep
それとも私が完全に間違った方向に行っているのでしょうか?素直に言えば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などのコマンドと一緒に使用して任意のファイル名を処理できます。