Grep到给定的文件名

时间:2015-02-03 18:39:05

标签: linux bash grep pipe

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

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

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

5 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

你可以这样做:

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

我知道您要求使用管道解决方案,但这项任务不是必需的。 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

答案 4 :(得分:0)

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