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.
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.