execに複数のgrepコマンドを追加してみてください

execに複数のgrepコマンドを追加してみてください

ディレクトリ(およびすべてのサブディレクトリ)のすべてのファイルから文字列を取得しようとしています。ファイルにその文字列がある場合は、他の文字列(この場合は「snake」)が表示される回数を検索して出力したいと思います。また、「蛇」が現れるファイルの行を出力したいと思います。

echo "Files with Reptile:"
find . -type f -name "*.txt" -exec grep -l "Reptile" {} \;

私の課題は、中かっこの後に追加のgrepコマンドを追加する方法です。いくつか試してみましたが、「-exec欠落引数」エラーが発生し続けます。

私はこの発見にあまりにも多くを入れようとしていますか?

ありがとう

ベストアンサー1

次のことを試すことができます。

$ find . -type f -name "*.txt" -exec sh -c "grep -l "Reptile" {} | xargs -I% grep -Hn snake %" \;
./rep1.txt:2:snake
./rep2.txt:5:another snake

出力にはコロンで区切られたリストが含まれます。ここで、最初の引数はファイル名(引数から-Hgrep、2番目の引数は目的の用語が表示される行番号(引数から-ngrep、3番目の引数は行自体です。

xargs外部に移動でき、find以下を提供します。

$ find . -type f -name "*.txt" -exec grep -l "Reptile" {} \; | xargs -i grep -Hn snake {}

(同じ)-iパラメータは使用されなくなりましたが、便宜上頻繁に使用されます。xargs-I{}

入力ファイル:

$ tail -n+1 rep*.txt
==> rep1.txt <==
Reptile
snake
iguana
crocodile

==> rep2.txt <==
Reptile
alligator
turtle
another snake
komodo dragon

==> rep3.txt <==
Reptile
lizard
gecko

間違ったファイル名を処理する必要がある場合は、xargsをマージして選択するprint0こと-0を検討してください。

おすすめ記事