Existem várias maneiras de usar grep com operadores lógicos.
#1 Use \| para separar vários padrões para a condição OU
grep 'pattern1\|pattern2' arquivo.txt
#2 Use a opção -E para enviar vários padrões para a condição OR
grep -E 'pattern1|pattern2' arquivo.txt
#3 O uso de um único -e corresponde a apenas um padrão, mas o uso de várias opções -e corresponde a mais de um padrão.
grep -e pattern1 -e pattern2 arquivo.txt
#4 grep -v pode simular a operação NOT.
#5 Não há operador AND no grep, mas você pode simular AND com força bruta usando a opção -E.
grep -E 'pattern1.*pattern2|pattern2.*pattern1' arquivo.txt
O exemplo acima corresponderá a todas as linhas que contêm pattern1 e pattern2 em qualquer ordem.)