我有一个目录,其中包含许多包含许多文件的子目录。
我使用ls *
列出当前目录的内容。我看到有些文件在名称方面是相关的。因此,相关文件可以这样获得ls * | grep "abc\|def\|ghi"
。
现在我想在给定的文件名中搜索。所以我试着这样的:
ls * | grep "abc\|def\|ghi" | zgrep -i "ERROR" *
但是,这不是查看文件内容,而是查看名称。有没有一种简单的方法可以用管道做到这一点?
答案 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"`