Grep 到给定的文件名

Grep into given filenames

我有一个目录,其中包含许多包含许多文件的子目录。

我使用ls *列出当前目录的内容。我看到某些文件的名称是相关的。因此,可以这样获取相关文件ls * | grep "abc\|def\|ghi".

现在我想在给定的文件名中搜索。所以我尝试类似的东西: ls * | grep "abc\|def\|ghi" | zgrep -i "ERROR" *,但是,这不是查看文件内容,而是文件名。有没有简单的方法可以用管道做到这一点?

要使用 grep 搜索目录中文件的内容,请尝试使用 find 命令,使用 xargs 将其与 grep 命令结合使用,如下所示:

find . -type f | xargs grep '...'

您应该使用 xargs 来 grep 每个文件内容:

ls * | grep "abc\|def\|ghi" | xargs zgrep -i "ERROR" *

你可以这样做:

find -E . -type f -regex ".*/.*(abc|def).*" -exec grep -H ERROR {} \+

-E 允许使用扩展的正则表达式,因此您可以使用竖线 (|) 来表达交替。最后的 + 允许在每次调用 -exec grep 时搜索尽可能多的文件,而不是为每个文件都需要一个全新的过程。

grep -i "ERROR" `ls * | grep "abc\|def\|ghi"`

我知道您要求使用管道解决方案,但对于此任务而言它们不是必需的。 grep参数很多,单独解决这个问题:

grep . -rh --include "*abc*" --include "*def*" -e "ERROR"

参数:

--include : Search only files whose base name matches the give wildcard pattern (not regex!)
-h : Suppress  the  prefixing  of file names on output.
-r : recursive
-e : regex filter pattern