grep con operadores lógicos

¿Existe una utilidad tipo grep que me permita hacer búsquedas grep con operadores lógicos? Quiero poder anidar y combinar las construcciones lógicas libremente. Por ejemplo, cosas como esta deberían ser posibles:

grep (term1 && term2) || (term1 && (term3 xor term4)) * 

Me doy count de que esto se puede hacer con grep vainilla y scripts adicionales bash, pero mi objective aquí es evitar tener que hacer eso.

Con awk , como con perl , tendrás que ajustar los términos en // , pero se puede hacer:

 awk '(/term1/ && /term2/) || (/term1/ && xor(/term3/, /term4/))' 

Hay muchas forms de usar grep con operadores lógicos.

Primer método

Puedes usar el | con la funcionalidad de escape. Debes usar \| para separar múltiples patrones para la condición o.

Ejemplo: grep 'pattern1\|pattern2' filename

Segundo método

puede usar la opción -E para enviar múltiples patrones para la condición o.

Ejemplo: grep -E 'pattern1|pattern2' filename

Tercer método

Con la opción -e puede enviar solo un patrón, pero al usar varias opciones -e puede enviar más de un patrón.

Ejemplo: grep -e pattern1 -e pattern2 filename

NOTA

No hay un operador AND en grep, pero puede simular Y utilizando la opción -E.

Ejemplo: grep -E 'pattern1.*pattern2|pattern2.*pattern1' filename

El ejemplo anterior grep todas las líneas que contienen tanto pattern1 y pattern2. (Editar: también en cualquier order)

ACTUALIZAR

Usando grep -v puedes simular la operación NOT.

Puedes usar perl:

 perl -wne 'print if (/term1/ && /term2/) || (/term1/ && (/term3/ xor /term4/))' 
 sed '/term1/!d;/term2/b' -e '/term3/!d;/term4/d' * 

Creo que eso logra lo que estás tratando de hacer. Emite desde salida cualquier línea que no concuerde con term1 , b ranuras fuera del guión (y de forma automática) cualquier línea que permanezca y que coincida con term2 , y para las líneas que permanecen elimina cualquier que no coincida con term3 y desde aquellos que coinciden con term4 .

sed scripts sed se evalúan en order y todas las testings son booleanas, por lo que cualquier acción resultante de una testing afectará directamente el comportamiento de las siguientes acciones.