it-swarm.cn

使用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 上的ack,它具有用于选择要按文件类型搜索的文件的功能。

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

Mannis的回答将为每个文本文件派生一个新的grep进程。如果那里有很多文本文件,则可以考虑先对每个文件进行grep提取,然后在完成后选择.txt文件:

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

那会占用更多的磁盘空间,但无论如何可能会更快。

0
Commander Keen

现在是2019年,我仍然无法使用grep进行递归文本搜索。

恕我直言,今天的答案应包括 ripgrep

rg <pattern> -ttxt
0
santa