Quero excluir palavras específicas dos resultados ao colocar tail no grep

Quero excluir palavras específicas dos resultados ao colocar tail no grep

Estou usando "tail -f /var/log/fail2ban.log -f /var/log/ufw.log | grep -e Ban -e BLOCK -e ALLOW" (sem as aspas) e está funcionando, mas quero exclua os resultados que contenham as palavras UDP e ICMP. Quando tento "tail -f /var/log/fail2ban.log -f /var/log/ufw.log | grep -e Ban -e BLOCK -e ALLOW -v UDP -v ICMP" recebo um erro "grep: UDP: Arquivo ou diretório inexistente" Parece que usar -v para excluir palavras não funciona durante a tubulação.

insira a descrição da imagem aqui

Responder1

Você pode simplesmente canalizar a primeira saída para outro grep e usá-la como outro "filtro" como:

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

Observe que grep pode empilhar strings diferentes, mesmo regex, quando você usa aspas duplas separando-as por uma barra vertical "|" mas você deve escapar do personagem com "\" para não pegar coisas estranhas.

O parâmetro -v diz literalmente em man

-v, --invert-match Inverte o sentido de correspondência, para selecionar linhas não correspondentes.

Portanto, parece apenas inverter a correspondência que você determina, portanto não é possível parametrizá-la.

Como você vê na sinopse, você pode fornecer 3 tipos de parâmetros. Opções, um padrão e um arquivo.

As opções são um todo sempre começando com - ou - e você pode colocar várias delas.

Você pode determinar um único padrão ou um tipo específico de padrão com -e ou -f ou sem nada.

E sempre o último deve ser o arquivo/s ou diretório (os diretórios precisam do parâmetro -R para recursá-los ou você pode simplesmente colocar o diretório/*). se não for especificado, ele tentará ler o stdin como você está fazendo.

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

De qualquer forma isso já érespondidasde uma forma mais básica

Responder2

Eu tenho uma solução alternativa para isso usando 2 sessões ssh, canalizo os resultados da primeira instrução grep em um arquivo e, em seguida, na segunda sessão ssh, coloco os resultados canalizados no grep. (1ª sessão ssh) - tail -f /var/log/fail2ban.log -f /var/log/ufw.log | grep -v ICMP >/home/user/staging (2ª sessão ssh) - tail -f /home/user/staging | grep -e ALLOW -e BLOCK um pouco pouco convencional, mas funciona.

informação relacionada