ディレクトリ(およびすべてのサブディレクトリ)のすべてのファイルから文字列を取得しようとしています。ファイルにその文字列がある場合は、他の文字列(この場合は「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
出力にはコロンで区切られたリストが含まれます。ここで、最初の引数はファイル名(引数から-H
)grep
、2番目の引数は目的の用語が表示される行番号(引数から-n
)grep
、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
を検討してください。