Respostas:
A opção de inversão de correspondência de padrão -vpara grepé realmente útil para isso:
grep -v 'UFW BLOCK' /var/log/syslog
Isso mostrará todas as linhas que não contêm UFW BLOCK. Como grepusa expressões regulares básicas por padrão, a inclusão dos colchetes fará com que procure qualquer um dos caracteres individuais de 'UFW BLOCK', incluindo o espaço. Você provavelmente acabará sem saída. Se você precisar garantir que haja colchetes ao redor da string, escape-os \[UFW BLOCK\]ou use a -Fopção de grepincluir apenas strings fixas (obrigado a Zanna e Steeldriver pelos conselhos sobre isso):
grep -Fv '[UFW BLOCK]' /var/log/syslog
Você pode facilitar a visualização, canalizando a saída para um pager como less:
grep -v 'UFW BLOCK' /var/log/syslog | less
Ou redirecione a saída para um arquivo no diretório inicial para visualização posterior:
grep -v 'UFW BLOCK' /var/log/syslog > ~/filtered_syslog
fgrepcomando que é equivalente a grep -F.
Você pode usar qualquer ferramenta com recursos de edição. Você já recebeu soluções usando grepe sed, aqui estão algumas outras opções. Tudo isso pode ser facilmente canalizado para lessou moreou qualquer outra coisa.
Perl
perl -ne 'print unless /\[UFW BLOCK\]/' /var/log/syslog
Como este é Perl, TIMTOWDI! .
perl -pe '$_="" if /\[UFW BLOCK\]/' /var/log/syslog
perl -ne '/\[UFW BLOCK\]/ || print' /var/log/syslog
perl -ne 'print if !/\[UFW BLOCK\]/' /var/log/syslog
perl -ne '!/\[UFW BLOCK\]/ && print' /var/log/syslog
perl -ne '/\[UFW BLOCK\]/ ? "" : print' /var/log/syslog
awk
awk '!/\[UFW BLOCK\]/' file
Você também pode usar awk:
awk '!/PATTERN/' log
Uso quando tenho mais de um "padrão" e não quero usar dois grepcomo:
... | grep -v foo | grep -v bar
qual a sintaxe é:
awk '!/PATTERN/ && !/PATTERN2/' log
grep -Ev "foo|bar"?
-epara definir vários padrões. grep -v -e 'foo' -e 'bar'
lessoferece a possibilidade de filtrar as linhas exibidas após um padrão de expressão regular. Você pode usar esse recurso digitando&seguido pelo padrão e revertê-lo digitando&sozinho.