Grep regex NO contiene cadena

Estoy pasando una lista de patrones de expresiones regulares paragrep para comprobar contra un archivo syslog. Por lo general, coinciden con una dirección IP y una entrada de registro;

<code>grep "1\.2\.3\.4.*Has exploded" syslog.log
</code>

Es solo una lista de patrones como el"1\.2\.3\.4.*Has exploded" parte paso, en un bucle, así que no puedo pasar "-v" por ejemplo.

Estoy confundido al intentar hacer lo inverso a lo anterior, una línea NO coincidente con una determinada dirección IP y error, por lo que "! 1.2.3.4. * Ha explotado" coincidirá con las líneas de syslog para cualquier otra cosa que no sea 1.2.3.4 y me diga que ha explotado . yodebe ser capaz de incluir una IP para NO coincidir.

He visto varias publicaciones similares en StackOverflor, sin embargo, usan patrones de expresiones regulares con los que parece que no puedo trabajar.grep. ¿Alguien puede proporcionar un ejemplo de trabajo paragrep ¿Por favor?

ACTUALIZAR: Esto está sucediendo en un guión como este;

<code>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
</code>

Respuestas a la pregunta(3)

Su respuesta a la pregunta