Você pode fazer isso com um script curto:
for FILE in *
do
grep -q foo $FILE && grep -q 321 $FILE && echo $FILE
done
Você também pode fazer isso em uma linha:
for FILE in *; do grep -q foo $FILE && grep -q 321 $FILE && echo $FILE; done
grep
retorna 0 (verdadeiro) se encontrou a string e o &&
separando os comandos significa que a segunda só será executada se a primeira for verdadeira. A opção -q
garante que grep
não produza nada.
O eco só será executado se ambas as seqüências forem encontradas no mesmo arquivo.
Eu pensei em uma maneira diferente de fazer isso. Desta forma, provavelmente será mais eficiente se os arquivos em questão forem maiores do que a sua RAM instalada, pois só tem que grep
através de cada arquivo uma vez.
for FILE in *
do
test $(egrep -o "foo|321" $FILE | uniq | sort | uniq | wc -l) -eq 2 && echo $FILE
done
e a versão de uma linha:
for FILE in *; do test $(egrep -o "foo|321" $FILE | uniq | sort | uniq | wc -l) -eq 2 && echo $FILE; done