Existe-t-il un moyen plus simple de faire cela? grep -v foo file | grep -v bar
Il existe probablement des moyens très élégants de le faire avec egrep, mais comment utiliser le vieux grep?
EDIT: grep -v "foo\|bar" file
semble fonctionner uniquement avec GNU grep. Je « m sous Solaris. Une solution pour cela?
Commentaires
Réponse
Vous pouvez avoir plusieurs tests dans un une seule commande grep
en passant chaque expression avec un argument -e
au lieu de comme premier argument sans option comme vous le voyez normalement:
$ grep -v -e foo -e bar file
Cela dit la même chose que votre commande: affiche les lignes de file
qui ne contiennent ni « foo » ni « bar » .
Gardez à lesprit que la suppression de -v
inverse complètement cela; cela change aussi lopération logique! Vous obtenez toutes les lignes contenant « foo » ou « bar ».
Answer
grep -Ev "word1|word2"
devrait fonctionner correctement
Commentaires
- Comme alternative, vous pouvez utiliser egrep et supprimer la barre oblique inverse pour le caractère pipe:
egrep -v 'word1|word2
- Il savère que cela ne fonctionne pas avec le grep Solaris. Jai installé le grep GNU et jai parfaitement fonctionné. Je ' je vais éditer ma question pour la rendre spécifique à Solaris.
- @rahmu
\|
est un grep GNU extension, mais vous pouvez réaliser la même chose de manière portable avec-E
et lopérateur|
.
-v
est une négation.not(A or B) == not(A) and not(B)