Вот простое решение 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