agrep pode fazer isso com esta sintaxe:
agrep 'pattern1;pattern2'
Com o GNU grep , quando construído com suporte a PCRE, você pode fazer:
grep -P '^(?=.*pattern1)(?=.*pattern2)'
Com ast grep :
grep -X '.*pattern1.*&.*pattern2.*'
(adicionar .* s como <x>&<y> corresponde a sequências que correspondem a <x> e <y> exatamente , a&b nunca corresponderia, pois não há essa sequência que possa seja a e b ao mesmo tempo).
Se os padrões não se sobrepuserem, você também poderá:
grep -e 'pattern1.*pattern2' -e 'pattern2.*pattern1'
A melhor maneira portátil é provavelmente com awk , como já mencionado:
awk '/pattern1/ && /pattern2/'
com sed :
sed -e '/pattern1/!d' -e '/pattern2/!d'
Por favor, esteja ciente de que todos eles terão uma sintaxe de expressão regular diferente.