GREP: Como procurar por um valor, mas, ao mesmo tempo excluir algumas partidas

StackOverflow https://stackoverflow.com/questions/1802233

  •  05-07-2019
  •  | 
  •  

Pergunta

Eu preciso de uma maneira de simplificar este comando:

grep 'SEARCHTERM' server.log | grep -v 'PHHIABFFH' | grep -v 'Stats'

Deve encontrar todas as linhas, incluindo SEARCHTERM mas excluem se uma das linhas SEARCHTERM inclui PHHIABFFH ou Stats.

Foi útil?

Solução

Este trabalho:

grep 'SEARCHTERM' server.log | grep -Ev 'PHHIABFFH|Stats'

Outras dicas

Por que você quer 'simplificar' esta tubulação? ferramentas Un * x linha de comando são feitas para ser preso de uma forma como esta.

Editar

Algumas das respostas sugerem a utilização de recursos das versões específicas de grep. I como este, mas é muito possível que tais características específicas não estão presentes na versão do grep usado pelo OP.

Então, enquanto nós não sabemos o que o ambiente do OP tem e qual a versão do que ferramenta que ele pode usar sugiro para manter o comum apresenta presente em todas versões das ferramentas usadas.

Este novo ilustra bem o Un * x filosofia.

É fácil subestimar o poder da combinação de tubos e redirecionamento. Como um exemplo elucidativo, O Unix Shell como um 4GL [Schaffer-Wolf] mostra que com essas instalações como um quadro, um punhado de utilitários simples podem ser combinados para apoiar a criação e manipulação de bases de dados relacionais expressos como mesas textuais simples.

http://www.catb.org/ ~ esr / escritos / taoup / html / ch07s02.html # encanamento

Se meios simples apenas um comando com mais args ...

awk '$0 !~ /PHHIABFFH|Stats/ && /SEARCHTERM/' server.log

você pode simplesmente usar o shell

while read -r line
do
   case "$line" in
    *"Stats"*|*"PHHIABFFH"*) continue;;
    *"SEARCHTERM"* ) echo "$line";;
   esac
done < "file"

Eu teria feito apenas isto:

grep 'SEARCHTERM' server.log | grep -v -e 'PHHIABFFH' -e 'Stats'
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top