有没有办法使用grep
或awk
来查找同时包含以下内容的文本文件? “a”和“b”但在这种情况下“a”和“b”在不同的行上?
答案 0 :(得分:5)
这是一个简单的awk
解决方案:
awk 'BEGIN {acnt=0; bcnt=0;} /a/ {acnt++;} /b/ {bcnt++} END { if (acnt > 0 && bcnt > 0) print "Matches"; }' $FILE
一种稍微简单的方法就是使用grep
,利用其返回值作为找到该值的指标:
grep -l a $FILE && grep -l b $FILE && echo "Both a and b found in $FILE"
您可能想要重定向标准输出,但上述内容应该简单实用。如果需要,你可以把它包装成循环:
files=""
for x in *; do
grep -l a $x && grep -l b $x && files="$files $x" # assuming no spaces
done
# now you can iterate over $files
答案 1 :(得分:2)
awk '/a/{f=1}/b/{g=1}END{if(f && g) print "matches"}' file
答案 2 :(得分:0)
你或许可以用一些讨厌的shell来解决这个问题,它解析了“a”的grepping输出并使用它来构建一个grep为“b”的文件列表,但是如果它是我的话我会汇总了一个简短的perl脚本。
答案 3 :(得分:0)
看看这是否适合你:
grep -lP '(?m)(a.*(.*\n)*.*b)|(b.*(.*\n)*.*a)' *