正規表現に基づいてファイルを検索してから、それらのファイルのコンテンツを検索しようとしています。たとえば、私は次のようなものを持っています
#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
引数on と共にxargs
)使用して、xargsがスペースを区切り文字として扱わないようにすることができます。同様のものはありgrep
ますか?
それとも、この問題に完全に間違った方法で取り組んでいますか?単純に、find
to は私grep
にxargs grep
は理にかなっていますが、同じ結果が得られる他のアプローチを受け入れます。
xargs
を使用して引数を配置できます。中括弧は、引数を配置する場所を示します。マニュアルは私に非難されていることを教えてくれますので、それも見てみる価値があるかもしれません。-i
cat sample.txt | grep "pat t ern" | xargs -i grep "{}"
-i
-I