Cè un modo più semplice per farlo? grep -v foo file | grep -v bar
Ci sono probabilmente modi molto eleganti per farlo con egrep, ma come andare con il vecchio grep normale?
MODIFICA: grep -v "foo\|bar" file
sembra funzionare solo con GNU grep. Io “sono su Solaris. Qualche soluzione per questo?
Commenti
Risposta
Puoi avere più test in un comando grep
passando ogni espressione con un argomento -e
invece che come primo argomento non opzionale come si vede normalmente:
$ grep -v -e foo -e bar file
Questo dice la stessa cosa che fa il tuo comando: stampa le righe da file
che non contengono né “foo” né “bar” .
Tieni presente che la rimozione di -v
inverte completamente questo aspetto; cambia anche loperazione logica! Ottieni tutte le righe che contengono “foo” o “bar”.
Answer
grep -Ev "word1|word2"
dovrebbe funzionare bene
Commenti
- In alternativa puoi usare egrep e rilasciare la barra rovesciata per il carattere pipe:
egrep -v 'word1|word2
- Risulta che non funziona con Solaris grep. Ho installato GNU grep e ha funzionato perfettamente. ' modifico la mia domanda per renderla specifica per Solaris.
- @rahmu
\|
è un grep GNU estensione, ma puoi ottenere lo stesso risultato in modo portatile con-E
e loperatore|
.
-v
è una negazione.not(A or B) == not(A) and not(B)