grep 目录中所有 .java 文件中的特定字符串

grep 目录中所有 .java 文件中的特定字符串

在 Mac OS X 上,如何在当前目录和所有子目录中搜索所有 .java 文件中的简单字符串(不是正则表达式)?我只想打印匹配的文件和目录名称的列表。

答案1

一直很受欢迎的

find . -name '*.java' | xargs grep -l 'string'

编辑(作者:弗兰克·斯泽巴):

如果您处理的文件名或目录中有空格,最安全的方法是:

find . -name '*.java' -print0 | xargs -0 grep -l 'string'

总是有多种方法可以做到。

答案2

对于这个问题,传统的 UNIX 答案是可以接受的:

find . -name '*.java' | xargs grep -l 'string'

这可能适用于 Java 文件,但文件名中的空格在 Mac 上比在传统 UNIX 世界中更常见。当带有空格的文件名通过上述管道传递时,xargs 会将各个单词解释为不同的名称。

您真正想要的是将名称用 nul 分隔,以使边界明确:

find . -name '*.java' -print0 | xargs -0 grep -l 'string'

另一种方法是让 find 为您运行 grep,正如 Mark 所建议的那样,但是如果您搜索大量文件,这种方法会更慢(因为 grep 对每个文件调用一次,而不是对整个文件列表调用一次)。

答案3

使用比 grep 更好的 grep,确认

ack -l --java  "string" 

答案4

如果您愿意,这实际上将使用正则表达式,只要远离元字符,或转义它们,您就可以搜索字符串。

find . -iname "*.java" -exec egrep -il "search string" {} \;

相关内容