
テキストファイルのフォルダツリーがあり、部分文字列のインスタンスとそのファイルの名前を探したいと思います。
私が次のことをするなら:
find . | xargs cat | grep 'abc'
これにより、部分文字列のインスタンスを見つけることができますが、元のファイルは見つかりません。
助けてくれてありがとう!
答え1
このように実行すると、xargs cat
ファイル名が失われ、データがパイプを流れる間にパイプに渡すための良い方法はありません。
ただし、grep -l
一致する文字列を含むファイル名がリストされているため、次のものを使用できます。
find . -type f | xargs grep -l hello
または、ディレクトリを再帰的に検索すると、grep -r
スペースや引用符を含むファイル名の問題も解決できます。xargs
grep -lre abc .
ファイル名だけでなく、一致する文字列も必要な場合は、通常の動作を-l
得るgrep
ために削除してください。コマンドラインにパスを指定しても、一致するファイル名を印刷する必要が-r
あります。
答え2
xargs
重複しています。xargs cat | grep
これにより、grep
すべてのファイルの関連コンテンツを含む名前のない入力ストリームのみが表示されます。に変更:
find . -type f -exec grep -H 'abc' {} +
これはファイルごとに呼び出されます(複数のファイルを引数として呼び出すことでgrep
インスタンス数を最小限に抑えます)。grep
grep
答え3
find ./ -type f -exec grep -H abc {} \;
または
grep -R 'abc' ./
答え4
awk
代わりにcat
試してください。grep
find . -type f | xargs awk '/abc/{printf "%s is from %s\n", $0, FILENAME}'
または単に使用find
してawk
find . -type f -exec awk '/abc/{printf "%s is from %s\n", $0, FILENAME}' {} +