Estoy pasando una lista de patrones regex a grep
para comparar con un archivo syslog. Por lo general, coinciden con una dirección IP y entrada de registro;Grep regex que NO contiene cadena
grep "1\.2\.3\.4.*Has exploded" syslog.log
Es sólo una lista de patrones como la parte "1\.2\.3\.4.*Has exploded"
estoy pasando, en un bucle, por lo que no puede pasar "-v", por ejemplo.
Estoy confundido tratando de hacer lo contrario de lo anterior, NO coinciden las 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 syslog para nada que no sea 1.2.3.4 diciendo me ha explotado. I debe ser capaz de incluir una IP para NO coincidir.
He visto varias publicaciones similares en StackOverflor pero utilizan patrones de expresiones regulares que parece que no puedo trabajar con 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
¿Quiere decir que a veces * * desea hacer coincidir un patrón, pero otras veces desea hacer coincidir todo * * excepto un cierto patrón? (Esto parece un requisito extraño, pero lo que sea). En ese caso, ¿por qué no iteras sobre dos listas diferentes de patrones? – beerbajay
Bueno, no estoy muy bien informado sobre expresiones regulares; No quiero grep para "Ha explotado" porque no quiero saber esto sobre cada dispositivo de registro, por lo que de alguna manera puedo grep para "Ha explotado" y! 9.10.11.12 en una declaración? – jwbensley
Si es absolutamente necesario que lo haga en una sola declaración, las miradas negativas son el camino a seguir, como sugiere Neil. Vea mi comentario allí. – beerbajay