¿Existe una utilidad similar a 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 cuenta de que esto se puede hacer con vainilla grep y secuencias de comandos bash adicionales, pero mi objetivo aquí es evitar tener que hacer eso.
-E
no es del todo equivalente al&&
hecho de que es sensible al ordengrep foo | grep bar
es una forma más general de hacer AND.Podrías usar perl:
fuente
Creo que eso logra lo que intentas hacer. Se
d
eletes de salida de cualquier línea que no coincideterm1
, seb
ranchos de la secuencia de comandos (y por lo autoprints) cualquier línea que queda y que los partidosterm2
y para las líneas que permanecen elimina cualquier que no coincidenterm3
y de aquellos que lo hacen ningún partidoterm4
.sed
las secuencias de comandos se evalúan en orden y todas las pruebas son booleanas, por lo que cualquier acción resultante de una prueba afectará directamente el comportamiento de las siguientes acciones.fuente
Utilizo para encadenar
grep
comandos para lograr un AND lógico:Creo que es bastante sencillo, similar a Unix y elegante.
Luego, puede combinar (como @Tushi explicó a fondo) con la
-E
opción de OR y-v
para negar.Su ejemplo específico es bastante desagradable y probablemente se beneficiaría de alguna utilidad más poderosa (vea la respuesta de @ muru).
fuente