Respostas:
A opção de inversão de correspondência de padrão -v
para 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 grep
usa 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 -F
opção de grep
incluir 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
fgrep
comando que é equivalente a grep -F
.
Você pode usar qualquer ferramenta com recursos de edição. Você já recebeu soluções usando grep
e sed
, aqui estão algumas outras opções. Tudo isso pode ser facilmente canalizado para less
ou more
ou 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 grep
como:
... | grep -v foo | grep -v bar
qual a sintaxe é:
awk '!/PATTERN/ && !/PATTERN2/' log
grep -Ev "foo|bar"
?
-e
para definir vários padrões. grep -v -e 'foo' -e 'bar'
less
oferece 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.