你需要找出包含特定字符串的文件,但是不想看到其所在的文本行,只用输出文件名即可。
解决方案
用 grep 的 -l 选项仅显示文件名即可。
$ grep -l printf *.c
both.c
good.c
somio.c
$
讨论
如果在一个文件中找到了多次匹配,grep 仍然只输出该文件名一次。如果没有找到匹配,则什么都不输出。
由于这些文件包含了你要查找的字符串,如果想据此构建一个待处理文件的列表,选项 -h
就能派上用场了。将 grep 命令放进 $()
,然后就可以在命令行上使用这些文件名了。
例如,要想删除包含字符串“This file is obsolete”的文件,可以使用以下这样的 shell 命令组合。
rm -i $(grep -l 'This file is obsolete' * )
我们给 rm 加上了 -i 选项,以便在删除每个文件前都先询问你。考虑到该命令组合的威力,这显然是一种更安全的处理方式。
bash 对 *
进行扩展,以匹配当前目录(但并不会深入子目录)下的所有文件并将其作为 grep 的参数。grep 生成包含指定字符串的文件列表。最后,rm 会删除该列表中的所有文件。
酷客网相关文章:
评论前必须登录!
注册