web-dev-qa-db-ja.com

grepおよびファイルパターンを使用した再帰的なテキスト検索

この例のフォルダー構造を考えると:

/folder1/file1.txt
/folder1/file2.djd
/folder2/file3.txt
/folder2/file2.fha

「/」からのgrepを含むすべての*.txtファイルに対して再帰的なテキスト検索を実行するにはどうすればよいですか?

(そのフォルダーに"grep -r <pattern> *.txt"ファイルがないため、「/」から実行すると.txtは失敗します。)

46
Anders Sandvig

私のバージョンのGNU Grepにはこのためのスイッチがあります:

grep -R --include='*.txt' $Pattern

次のように説明します。

--include=GLOB

ベース名がGLOBに一致するファイルのみを検索します(--excludeで説明されているワイルドカード一致を使用)。

62
Kyle Brandt

多数のファイルがある場合は、xargsをコマンドに組み込んで、「引数リストが長すぎます」エラーを回避すると便利です。

find . -name '*.txt' -print | xargs grep <pattern>
20
Mark

zshEXTENDED_GLOBオプションを使用できる場合があります( docs

grep <pattern> **/*.txt
2
santa

http://betterthangrep.com で確認することをお勧めします。これには、ファイルタイプで検索するファイルを選択する機能があります。

1
Andy Lester
find . -name '*.txt' -type f -exec grep <pattern> {} \;
0
innaM

Mannisの回答は、すべてのテキストファイルに新しいgrepプロセスをフォークします。そこにlotsのテキストファイルがある場合は、最初にすべてのファイルをgrepすることを検討し、それが完了したら.txtファイルを選択することができます。

grep -r <pattern> * | grep \.txt:

これはディスクを集中的に使用しますが、いずれにしても高速になる可能性があります。

0
Commander Keen

それは2019年であり、再帰的なテキスト検索にまだgrepを使用する方法はありません。

私見の今日の回答には ripgrep を含める必要があります:

rg <pattern> -ttxt
0
santa