¿Cómo ejecutar grep con múltiples patrones AND?

Pregunta:

Me gustaría obtener la coincidencia de múltiples patrones con AND implícito entre patrones, es decir, equivalente a ejecutar varios greps en una secuencia:

grep pattern1 | grep pattern2 | ...

Entonces, ¿cómo convertirlo en algo así?

grep pattern1 & pattern2 & pattern3

Me gustaría usar un solo grep porque estoy construyendo argumentos dinámicamente, por lo que todo tiene que caber en una cadena. El uso de filter es una característica del sistema, no grep, por lo que no es un argumento para ello.


No confunda esta pregunta con:

grep "pattern1\|pattern2\|..."

Esta es una coincidencia de varios patrones OR .

Respuesta:

agrep puede hacerlo con esta sintaxis:

agrep 'pattern1;pattern2'

Con GNU grep , cuando se construye con soporte PCRE, puede hacer:

grep -P '^(?=.*pattern1)(?=.*pattern2)'

Con ast grep :

grep -X '.*pattern1.*&.*pattern2.*'

(agregando .* s ya que <x>&<y> coincide con cadenas que coinciden exactamente con <x> y <y> , a&b nunca coincidiría ya que no existe tal cadena que pueda ser a y b al mismo tiempo).

Si los patrones no se superponen, es posible que también pueda hacer lo siguiente:

grep -e 'pattern1.*pattern2' -e 'pattern2.*pattern1'

La mejor forma portátil es probablemente con awk como ya se mencionó:

awk '/pattern1/ && /pattern2/'

Con sed :

sed -e '/pattern1/!d' -e '/pattern2/!d'

Tenga en cuenta que todos tendrán una sintaxis de expresión regular diferente.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım