para encontrar arquivos que contenham ambos:
(assumindo o GNU grep
/ xargs
)
grep -rl --null abc . | xargs -r0 grep -l bcd
E se você quiser ver as linhas que contêm abc
ou bcd
ou ambos nos arquivos que contêm abc
e bcd
:
grep -rl --null abc . |
xargs -r0 grep -l --null bcd |
xargs -r0 grep -He abc -e bcd
para corresponder a linhas que contenham ambos:
grep -re 'foo.*bar' -e 'bar.*foo' .
Isso funciona desde que os padrões não se sobreponham.
grep -re 'abc.*bcd' -e 'bcd.*abc' .
Não conseguirá encontrar as linhas que contêm abcd
.
Se o seu grep
tiver -P
para o PCRE:
grep -rP '^(?=.*abc).*bcd' .
funcionaria.
Ou POSIXly:
find . ! -type d -exec awk '/abc/ && /bcd/ {print FILENAME ":" $0}' {} +
Você também pode usar agrep
:
agrep -r 'abc;bcd' .