列出文本中包含特定单词的文件


30

我想递归且唯一地列出包含给定单词的文件。

例子:检查单词“ check”,我通常是grep

$ grep check * -R

但是由于这个词的出现次数很多,所以我得到了很多输出。因此,我只需要列出包含给定搜索词的文件名。我猜有些招用findxargs会在这里就够了,但不知道。

有任何想法吗?

Answers:


39

使用-l--files-with-matches选项,其说明如下:

抑制正常输出;而是打印通常会从中打印输出的每个输入文件的名称。扫描将在第一个匹配项时停止。(-l由POSIX指定。)

因此,您可以使用以下示例:

$ grep check * -lR

也适用于MSYS。大!
科斯

2
我用过grep -rl "text to find" "/usr/share",效果很好!
Shrout1,2014年

18
find . -type f -exec grep -l check {} +

您可能不想使用在降级目录时-RGNU的现代版本grep遵循符号链接的选项。请从-r那里使用选项,因为自版本2.12(2012年4月)起,该选项不再遵循符号链接。

如果您的grep不是GNU版本或早于2.12版本,或者您需要将代码移植到非出血边缘GNU系统,请使用find上面的命令。

否则,您可以执行以下操作:

grep -rl check .

请勿使用*(因为这会忽略当前目录(仅在当前目录中)的隐藏文件,并且会导致名称以开头的文件出现问题-),请避免在参数后传递选项,因为这不能保证可以正常工作,具体取决于环境,不是便携式的。


1

尝试这个:

find . -type f | xargs grep -c check $1 | grep -v ":0"

至于grep标志...

-c 将返回一个文件名,后跟:和一个数字,该数字指示搜索字符串出现在给定文件中的次数。

-v将从第一次grep搜索中获取输出,过滤出结果为零的文件,并仅打印结果为非零的文件。


如果您有名称包含的文件(或导演),则将得到错误的否定:0。最好做grep -v ':0$'。即使那样也会阻塞包含换行符的路径名。
斯科特

0

grep -rin“ whatToFind” locationToFInd

例如$ grep -rin“ vihaan”。

将递归搜索并列出文件名以及其中带有“ vihaan”的对应行“。”。指当前目录。



0

grep -lR "text-to-find" <where-to-find> 也可以。

例如, grep -lR "NAVIGATE" .我们在当前目录NAVIGATE中的哪里找到单词.


-2
 grep -rli trim \` find . -name *.q \` 

给您.q包含关键字的文件列表trim

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.