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


46

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

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

from "/"を*.txt使用してすべてのファイルで再帰的なテキスト検索を実行するにはどうすればよいgrepですか?

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

回答:


61

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

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

次のように説明します。

--include=GLOB

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


19

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

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

6
ファイル名またはディレクトリ名のいずれかにスペースが含まれている場合は、次の形式を使用します:find -name '* .txt' -print0 | xargs -0 grep <パターン>
ジェイソンルーサー

2
そしてもちろん、で始まるファイル名の問題があります-
TJクラウダー

grepの方が高速ですfind
ナビKAZ

2

あなたzshEXTENDED_GLOBオプションを利用できるかもしれません(docs

grep <pattern> **/*.txt

OPがzshを使用している場合のみ、それでも興味深い。
法律


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

代わりに "find。-name '* .txt' -type f -exec grep <pattern> {} +"を使用して、Mark Robinsonからのバージョンと同様に動作するようにすることができます-私の知る限りGNU findでのみ動作します
serverhorror

0

マニスの答えは、すべてのテキストファイルに対して新しいgrep-processをフォークします。テキストファイルがたくさんある場合は、まずすべてのファイルをgrepし、それが完了したら.txtファイルを選択することを検討します。

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

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


0

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

私見今日の答えはripgrepを含む必要があります

rg <pattern> -ttxt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.