Quiero excluir palabras específicas de los resultados al conectar tail en grep

Quiero excluir palabras específicas de los resultados al conectar tail en grep

Estoy usando "tail -f /var/log/fail2ban.log -f /var/log/ufw.log | grep -e Ban -e BLOCK -e ALLOW" (sin las comillas) y está funcionando, pero quiero excluya los resultados que contengan las palabras UDP e ICMP. Cuando intento "tail -f /var/log/fail2ban.log -f /var/log/ufw.log | grep -e Ban -e BLOCK -e ALLOW -v UDP -v ICMP" aparece el error "grep: UDP: No existe tal archivo o directorio". Parece que usar -v para excluir palabras no funciona al realizar la canalización.

ingrese la descripción de la imagen aquí

Respuesta1

Puedes simplemente canalizar la primera salida a otro grep y usarlo como otro "filtro" como:

tail -f /var/log/fail2ban.log -f /var/log/ufw.log | grep "Ban\|BLOCK\|ALLOW" | grep -v "UDP\|ICMP"

Tenga en cuenta que grep puede apilar diferentes cadenas, incluso expresiones regulares, cuando usa comillas dobles separándolas con una barra vertical "|" pero debes escapar del personaje con "\" para no obtener cosas raras.

El parámetro -v dice literalmente en man

-v, --invert-match Invierte el sentido de coincidencia para seleccionar líneas que no coinciden.

Entonces parece simplemente invertir la coincidencia que usted determina, por lo que no puede parametrizarla.

Como ves en la sinopsis, puedes dar 3 tipos de parámetros. Opciones, un patrón y un archivo.

Las opciones son todas, siempre comienzan con - o - y puedes poner varias.

Puede determinar un patrón único o un tipo específico de patrón con -e o -f o sin nada.

Y siempre el último debe ser el archivo o directorio (los directorios necesitan el parámetro -R para recurrirlos o simplemente puede poner el directorio/*). si no se especifica, intentará leer la entrada estándar como lo está haciendo usted.

   SYNOPSIS
   grep [OPTION...] PATTERNS [FILE...]
   grep [OPTION...] -e PATTERNS ... [FILE...]
   grep [OPTION...] -f PATTERN_FILE ... [FILE...]

De todos modos esto ya escontestadade una manera más básica

Respuesta2

Tengo una solución para esto usando 2 sesiones ssh. Canalizo los resultados de la primera declaración grep a un archivo y luego, en la segunda sesión ssh, sigo los resultados canalizados a grep. (Primera sesión ssh) - tail -f /var/log/fail2ban.log -f /var/log/ufw.log | grep -v ICMP >/home/user/staging (segunda sesión ssh) - tail -f /home/user/staging | grep -e ALLOW -e BLOCK es un poco poco convencional pero funciona.

información relacionada