¿Cómo hago grep para líneas que contienen una de las dos palabras, pero no ambas?

Pregunta:

Estoy tratando de usar grep para mostrar solo las líneas que contienen cualquiera de las dos palabras, si solo una de ellas aparece en la línea, pero no si están en la misma línea.

Hasta ahora he probado grep pattern1 | grep pattern2 | ... pero no obtuve el resultado que esperaba.

Respuesta:

Una herramienta distinta a grep es el camino a seguir.

Usando perl, por ejemplo, el comando sería:

perl -ne 'print if /pattern1/ xor /pattern2/'

perl -ne ejecuta el comando dado sobre cada línea de stdin, que en este caso imprime la línea si coincide con /pattern1/ xor /pattern2/ , o en otras palabras, coincide con un patrón pero no con el otro (exclusivo o).

Esto funciona para el patrón en cualquier orden y debería tener un mejor rendimiento que múltiples invocaciones de grep , y también es menos tipeado.

O, incluso más corto, con awk:

awk 'xor(/pattern1/,/pattern2/)'

o para versiones de awk que no tienen xor :

awk '/pattern1/+/pattern2/==1`

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım