Existe uma maneira mais simples de fazer isso? grep -v foo file | grep -v bar
Existem provavelmente maneiras muito elegantes de fazer isso com o egrep, mas como usar o grep antigo e simples?
EDITAR: grep -v "foo\|bar" file
parece funcionar apenas com GNU grep. Estou no Solaris. Alguma solução para isso?
Comentários
Resposta
Você pode ter vários testes em um único comando grep
passando cada expressão com um argumento -e
em vez de como o primeiro argumento não opcional, como você normalmente vê:
$ grep -v -e foo -e bar file
Isso diz a mesma coisa que seu comando: imprime linhas de file
que não contêm “foo” nem “bar” .
Lembre-se de que remover -v
inverte isso completamente; ele muda a operação lógica também! Você obtém todas as linhas que contêm “foo” ou “bar”.
Resposta
grep -Ev "word1|word2"
deve funcionar bem
Comentários
- Como alternativa, você pode usar egrep e soltar a barra invertida para o caractere barra vertical:
egrep -v 'word1|word2
- Acontece que isso não funciona com o grep Solaris. Instalei o GNU grep e funcionou perfeitamente. Eu ' vou editar minha pergunta para torná-la específica do Solaris.
- @rahmu
\|
é um grep GNU extensão, mas você pode conseguir a mesma coisa de forma portátil com-E
e o operador|
.
-v
é uma negação.not(A or B) == not(A) and not(B)