使用grep或awk查找包含不同行上的"a"和"b"的文件

and*_*ewj 2 unix awk grep

有没有办法使用grepawk查找包含例如"a"和"b"的文本文件,但在这种情况下"a"和"b"在不同的行上?

Kal*_*son 5

这是一个简单的awk解决方案:

awk 'BEGIN {acnt=0; bcnt=0;} /a/ {acnt++;} /b/ {bcnt++} END { if (acnt > 0 && bcnt > 0) print "Matches"; }' $FILE
Run Code Online (Sandbox Code Playgroud)

一种稍微简单的方法就是使用grep,利用其返回值作为找到值的指标:

grep -l a $FILE && grep -l b $FILE && echo "Both a and b found in $FILE"
Run Code Online (Sandbox Code Playgroud)

您可能希望重定向标准输出,但上述内容应该简单实用.如果需要,你可以将它包装在一个循环中:

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
Run Code Online (Sandbox Code Playgroud)