unix命令行...如何grep并只显示包含字符串的文件名?

时间:2014-11-04 21:05:29

标签: unix command-line grep

我知道我可以搜索一个字符串:

grep -n -d recurse 'snoopy' *

然后它显示包含该字符串的每个文件名和实例,如:

file/name.txt:23    some snoopy here
file/name2.txt:59   another snoopy there
file/name2.txt:343  some more snoopy
etc...

问题是,在很多事件中,列表很大。如何使它只显示包含字符串的实际文件名,没有重复项且没有出现?

仅限于:

file/name1.txt
file/name52.txt
file/name28293.txt

非常感谢您的帮助:)

1 个答案:

答案 0 :(得分:14)

-l标志(或者,在BSD和GNU grep中,--files-with-matches)做你想要的。

来自the POSIX spec

  

仅将包含所选行的文件名写入标准输出。每个搜索的文件都应写入一次路径名。如果搜索标准输入,则路径名为"(标准输入)"应在POSIX语言环境中编写。在其他语言环境中,"标准输入"可能会被那些更合适的地方所取代。

BSD和GNU都明确保证这将更有效。 (Older BSD版本说" ... grep只会在找到匹配项之前搜索文件,从而使搜索成本更低[&34;,newer BSDGNU说"扫描将在第一场比赛中停止"。)如果你不知道你拥有哪个grep以及它有哪些选项,只需在shell上输入man grep即可你应该得到联机帮助页。