如何在终端中查找带有特定文本的文件


168

我想查找所有包含特定文本字符串的文件。您将如何在终端中做到这一点?


如果您想获得快速的结果,请使用Spotlight。另外,如果您要查找不一定在文件内直接存储文本的文件,例如PDF或ODF。
乔伊,2010年

很好的建议,但就我而言,由于文件位于网络驱动程序上,因此我不确定文件是否已编制索引。而且它们也是属于特定程序的xml文件。
Svish

看看unix.stackexchange.com/a/37932/213832这个解决方案效果很好
boyd4715 '17

Answers:


279
grep -r 'text goes here' path_goes_here

1
我建议man grep您发现grep的所有精彩选择
Ludovic Kuty

这列出了路径中存在的每个文件,并添加了以下内容:No such file or directory 我试图仅获取文本出现的列表。我们如何获得该清单?
CP3O

7
明白了: grep -lr "text pattern" ./ -s; grep -lr "text pattern" [PATH OF PARENT] -s
CP3O

但这会返回匹配文件的内容,而不是文件详细信息(名称,路径)。@ CP3O的建议有效。
geotheory,

28

使用聚光灯

mdfind "text goes here"
mdfind -onlyin /home/user/Desktop -live "live update"

不要忘记看:

man mdfind

2
这对于聚光灯无法索引的文件(即隐藏文件夹中的文件,系统配置文件等)是否有用?
彼得·伯格

Grep似乎没有解析.xlsx文件,但是效果很好。另一个简单的示例:mdfind -onlyin。“ searchtext”
FvD


4

您可以根据自己的口味和需求选择以下一种。假设您需要在当前目录中递归搜索包含文本的文件-“异步”,则可以通过以下方式之一进行:

使用grep 在此处输入图片说明

使用ack 在此处输入图片说明


2

Ignacio的答案很棒,并帮助我找到了包含某些文本的文件。我面临的唯一问题是,在运行此命令时,所有文件都会被列出,包括其中一个未显示模式的文件。

No such file or directory 这是我在不包含模式的文件旁边看到的。

相反,如果您添加-s到命令中,则如下所示: grep -lr "text pattern" ./ -s; grep -lr "text pattern" [PATH DIRECTORY] -s使用,它将仅显示包含该模式的文件。

同样如果grep -nr "text pattern" ./ -s; grep -nr "text pattern" [PATH OF DIRECTORY] -s使用命令打印文件,加上行号以及模式的出现。

如果我的理解是错误的,请纠正我。

参考:如何让grep无法打印出“无此类文件或目录”错误?


避免这些讨厌的此类文件错误的另一种方法是将stderr传递给null。grep ... 2>/dev/null。该解决方案适用于大多数程序,因为它们在stderr流而不是stdout上报告错误消息。我已经多次使用此解决方案find,因为它将说许多文件的权限被拒绝
jpaugh

(1)如果您收到No such file or directory有关存在文件的消息,则可能是做错了什么,或者系统已损坏。(2)[PATH OF PARENT]有什么关系?
G-Man

@ G-Man我编辑了答案,[PATH OF DIRECTORY]以防万一某个陌生的人想知道我为什么放./
CP3O

@ G-Man我使用的是Mac,而不是Ubuntu,不确定我的系统将如何损坏,我几乎还没有做任何事情。
CP3O
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.