如何结合 find 和 grep 在 /home/smith/sourcecode 的 *.html 和 *.php 文件中递归搜索 str 或 str2?

如何结合 find 和 grep 在 /home/smith/sourcecode 的 *.html 和 *.php 文件中递归搜索 str 或 str2?

如何结合find和以递归方式从名为 /home/smith/source 的目录开始在所有 *.html 和 *.php 文件中grep搜索str1str2?输出只需要列出文件(带路径),而不是实际匹配的字符串。我尝试了很多种方法,但都没有成功。有很多示例说明如何针对一个文件模式或一个字符串执行此操作,但不是针对多个文件模式和多个字符串执行此操作--递归地

答案1

其他的都是正确的,但我认为,有了现代版的 grep,这些方法就有点矫枉过正了。下面将以递归方式扫描扩展名为 .html 或 .php 的文件,并返回每个文件的文件名和路径,其中至少有一行与 str1 或 str2 匹配。请注意,重复选项-e允许指定多个路径,而无需使用正则表达式语法。

grep -r --文件与匹配 --include '.html'--包括'.php'-e str1-e str2 /home/smith/source

一个工具,一个过程,无需额外分叉或扫描不相关的文件。只需要相对较新版本的 gnu grep 即可使用 --include 选项,否则您将不得不按照其他人的建议执行多阶段 grep。

答案2

egrep 'string1|string2' /home/smith/source/*.{html,php}

或者在目录内递归地查看任何类型的文件,

egrep -R 'string1|string2' /home/smith/source

您可以将其与管道中的另一个 egrep 结合起来:

egrep -R 'string1|string2' /home/smith/source | egrep '.html|.php'

答案3

使用egrep并使用 | 来指定 str1 或 str2-:

find /home/smith/source -name \*.html -o -name \*.php -exec egrep -H 'str1|str2' {} \;

答案4

如果您使用ack(请参阅http://beyondgrep.com) 你可以这样做:

ack --php --html -l 'str1|str2' /home/smith/source

相关内容