varios varias uso test solo siguientes regulares regresará que patrones palabras palabra líneas los expresiones exacta ejemplos egrep cuál con comiencen comandos buscar grep

varias - Usar grep con expresión regular para filtrar coincidencias



ls grep (2)

Intento usar grep con -v para invert-match junto con -e para expresión regular. Tengo problemas para obtener la sintaxis correcta.

Estoy intentando algo como

tail -f logFile | grep -ve "string one|string two"

Si lo hago de esta manera no se filtra Si lo cambio a

tail -f logFile | grep -ev "string one|string two"

yo obtengo

grep: string one|string two: No such file or directory

He intentado usar () o comillas, pero no he podido encontrar nada que funcione.

¿Cómo puedo hacer esto?


El problema es que, de forma predeterminada, necesita escapar de su | s para obtener la alternancia adecuada. Es decir, grep interpreta que "foo | bar" coincide con la cadena literal "foo | bar" solamente, mientras que el patrón "foo / | bar" (con un escape |) coincide con "foo" o "bar".

Para cambiar este comportamiento, use la bandera -E:

tail -f logFile | grep -vE ''string one|string two''

Alternativamente, use egrep, que es equivalente a grep -E:

tail -f logFile | egrep -v ''string one|string two''

Además, el -e es opcional, a menos que el patrón comience con un guión literal. grep toma automáticamente el primer argumento no opcional como patrón.


Debe escaparse del símbolo de tubería cuando -e se usa:

tail -f logFile | grep -ve "string one/|string two"

EDITAR: o, como @Adam señaló, puede usar la bandera -E:

tail -f logFile | grep -vE "string one|string two"