Bash Shell只显示搜索结果的文件名

你需要找出包含特定字符串的文件,但是不想看到其所在的文本行,只用输出文件名即可。

解决方案

用 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 会删除该列表中的所有文件。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!