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"