如何在 Linux 上使用 grep 只显示文件名

grep
是一个用于搜索文本文件的 Linux 实用程序。默认情况下,它会打印出搜索结果,但它也可用于匹配和打印包含搜索结果的文件名,这在与其他脚本连接时非常有用。
使用 grep 打印文件名
grep
通常与 bash 脚本中的其他命令一起用作通用文本搜索实用程序。但是,默认情况下,它不会打印有关文件名的任何信息,如果您将输出传递给另一个实用程序,您可能需要这些信息。

如果您想要匹配的文件列表,您可以使用带有 -l
标志的 grep
, 它将列出文件名而不是匹配:
grep -l foo ./*

这类似于 -H
标志,它将输出包含文件名和匹配行的响应。但是,使用 -l
,它将仅打印文件名,为您提供包含搜索字符串的文件列表。
您还可以使用大写 -L
标志 执行相反操作:打印所有不包含匹配字符串的文件。
grep -L baz ./*

修剪文件路径
默认情况下,-l
标志将打印带有预先附加的相对文件路径的文件。如果您只想要实际的文件名,则可以使用 basename
实用程序修剪文件路径。这将需要通过 xargs
传递输入,但效果很好:
grep -l foo ./* | xargs -L 1 basename

请记住,grep -r
将递归搜索,如果您将其与 basename
一起使用,则响应可能包含不在当前直接路径中的具有修剪路径的文件。
使用 grep 和 find 命令
grep
还可以与 find
命令的额外搜索实用程序配合使用。例如,您可以将它与 find
命令一起使用以搜索目录中的每个文本文件并轻松运行 grep
搜索:
find . -iname "*txt" -exec grep foo {} ;

或者将它与 -l
标志一起使用以列出文件名:
find . -iname "*txt" -exec grep -lH foo {} ;
