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
我有一个目录,其中包含许多包含许多文件的子目录。
我使用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