关闭。此问题不符合 Stack Overflow 准则。它目前不接受答案。我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为 Stack Overflow 的主题。 4个月前关闭。社区在 4 个月前审查了是否重新打开此问题并将其关闭:原始关闭原因未解决 改进此问题
如何在 Linux 上使用 grep 只显示文件名(无内嵌匹配)?
我通常使用类似的东西:
find . -iname "*php" -exec grep -H myString {} \;
我怎样才能得到文件名(带路径),但没有匹配项?我必须使用 xargs 吗?我没有在我的 grep 手册页上看到这样做的方法。
vim $(grep -rl Something app/)
grep -lr 'text-to-find' ./*
效果很好!
标准选项 grep -l
(即小写 L)可以做到这一点。
-l
(The letter ell.) Write only the names of files containing selected
lines to standard output. Pathnames are written once per file searched.
If the standard input is searched, a pathname of (standard input) will
be written, in the POSIX locale. In other locales, standard input may be
replaced by something more appropriate in those locales.
在这种情况下,您也不需要 -H
。
从 grep(1)
手册页:
-l, --files-with-matches 禁止正常输出;而是打印通常会从中打印输出的每个输入文件的名称。扫描将在第一次匹配时停止。 (-l 由 POSIX 指定。)
对于简单的文件搜索,您可以使用 grep 的 -l
和 -r
选项:
grep -rl "mystring"
所有的搜索都是由 grep 完成的。当然,如果您需要在其他参数上选择文件,find 是正确的解决方案:
find . -iname "*.php" -execdir grep -l "mystring" {} +
execdir
选项为每个目录构建每个 grep 命令,并将文件名仅连接到一个命令 (+
)。
我的命令建议使用路径获取文件名
sudo find /home -name *.php
此命令在我的 Linux 操作系统上的输出:
compose-sample-3/html/mail/contact_me.php
grep -nrl "some text" .
一起使用