with starts online example egrep regex grep

online - grep regex starts with



Grep regex que NO contiene cadena (3)

Estoy pasando una lista de patrones regex a grep para grep con un archivo syslog. Por lo general, coinciden con una dirección IP y entrada de registro;

grep "1/.2/.3/.4.*Has exploded" syslog.log

Es solo una lista de patrones como la parte "1/.2/.3/.4.*Has exploded" que estoy pasando, en un bucle, por lo que no puedo pasar "-v", por ejemplo.

Estoy confundido tratando de hacer lo contrario de lo anterior, un NO coincide líneas con una cierta dirección IP y el error por lo que "! 1.2.3.4. * Ha explotado" coincidirá con las líneas de syslog para cualquier cosa que no sea 1.2.3.4 diciéndome que ha explotado . Debo poder incluir una IP para NO coincidir.

He visto varias publicaciones similares en StackOverflor, pero utilizan patrones de expresiones regulares que parece que no puedo usar grep . ¿Alguien puede proporcionar un ejemplo de trabajo para grep por favor?

ACTUALIZACIÓN: Esto está sucediendo en un script como este;

patterns[1]="1/.2/.3/.4.*Has exploded" patterns[2]="5/.6/.7/.8.*Has died" patterns[3]="/!9/.10/.11/.12.*Has exploded" for i in {1..3} do grep "${patterns[$i]}" logfile.log done


grep coincide, grep -v hace lo contrario. Si necesita "emparejar A pero no B", generalmente utiliza tuberías:

grep "${PATT}" file | grep -v "${NOTPATT}"


(?<!1/.2/.3/.4).*Has exploded

Necesita ejecutar esto con -P para tener un lookbehind negativo (expresión regular de Perl), por lo que el comando es:

grep -P ''(?<!1/.2/.3/.4).*Has exploded'' test.log

Prueba esto. Utiliza un lookbehind negativo para ignorar la línea si está precedido por 1.2.3.4 . ¡Espero que ayude!


patterns[1]="1/.2/.3/.4.*Has exploded" patterns[2]="5/.6/.7/.8.*Has died" patterns[3]="/!9/.10/.11/.12.*Has exploded" for i in {1..3} do grep "${patterns[$i]}" logfile.log done

debe ser el mismo que

egrep "(1/.2/.3/.4.*Has exploded|5/.6/.7/.8.*Has died)" logfile.log | egrep -v "9/.10/.11/.12.*Has exploded"