Existe uma maneira mais simples de fazer isso?
grep -v foo file | grep -v bar
Provavelmente existem maneiras muito elegantes de fazer isso com o egrep, mas como seguir com o grep antigo?
EDIT: grep -v 'foo\|bar' file
parece funcionar apenas com o GNU grep. Estou no Solaris. Alguma solução para isso?
-v
bandeira é uma negação.not(A or B) == not(A) and not(B)
Respostas:
Você pode ter vários testes em um único
grep
comando passando cada expressão com um-e
argumento, em vez de ser o primeiro argumento sem opção, como você normalmente vê:Isso diz o mesmo que seu comando: linhas de impressão
file
que não contêm "foo" nem "bar".Lembre-se de que remover
-v
completamente inverte isso; também muda a operação lógica! Você obtém todas as linhas que contêm "foo" ou "bar".fonte
grep -Ev 'word1|word2'
deve funcionar muito bemfonte
egrep -v 'word1|word2
\|
é uma extensão GNU grep, mas você pode conseguir a mesma coisa de maneira portátil com-E
e com o|
operador.