Estoy pasando una lista de patrones regex greppara verificar en un archivo syslog. Por lo general, coinciden con una dirección IP y una entrada de registro;
grep "1\.2\.3\.4.*Has exploded" syslog.log
Es solo una lista de patrones como la "1\.2\.3\.4.*Has exploded"parte 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 con las líneas 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 cosa que no sea 1.2.3.4 diciéndome que ha explotado . Yo debo ser capaz de incluir una IP a no coinciden.
He visto varias publicaciones similares en StackOverflor, sin embargo, usan patrones de expresiones regulares con las que parece que no puedo trabajar grep. ¿Alguien puede proporcionar un ejemplo de trabajo por grepfavor?
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

patterns[3]="\!9\.10\.11\.12.*Has exploded"cambiospatterns[3]="(?<!9\.10\.11\.12).*Has exploded"y losgrep "${patterns[$i]}" logfile.logcambios engrep -P "${patterns[$i]}" logfile.logPCRE asumen más metacaracteres de forma predeterminada, por lo que algunos de los escapes pueden necesitar eliminarse de otras expresiones coincidentes.Respuestas:
grepcoincide,grep -vhace lo contrario. Si necesita "hacer coincidir A pero no B", generalmente usa tuberías:fuente
-vy puede usarlo en un bucle. Quizás necesite ser más específico acerca de sus limitaciones, o quizás tenga una idea errónea sobre cómo debería funcionar su script. Intenta publicar un código.Debe ejecutar esto con -P para tener una mirada negativa hacia atrás (expresión regular de Perl), por lo que el comando es:
Prueba esto. Utiliza una mirada hacia atrás negativa para ignorar la línea si está precedida por
1.2.3.4. ¡Espero que ayude!fuente
grepno es compatible con la búsqueda. A menos que esté usando Gnugrepy use el--Pparámetro para que use un motor PCRE.grep -P '(?<!1\.2\.3\.4) Has exploded' test.logtenga en cuenta que el aspecto posterior solo funciona en los caracteres que preceden inmediatamente a la parte coincidente de la expresión, por lo que si hay otras cosas entre la dirección y el mensaje, por ejemplo1.2.3.4 FOO Has exploded, esto no funcionará..*mirada negativa posterior, ya que su ejemplo también lo tiene, imagino que podría haber otro texto en el medio.debería ser lo mismo que
fuente