Is er een eenvoudigere manier om dit te doen? grep -v foo file | grep -v bar
Er zijn waarschijnlijk zeer elegante manieren om het met egrep te doen, maar hoe ga je om met gewoon oud grep?
BEWERK: grep -v "foo\|bar" file
lijkt alleen te werken met GNU grep. Ik gebruik Solaris. Is daar een oplossing voor?
Reacties
Antwoord
Je kunt meerdere tests hebben in een enkel grep
commando door elke uitdrukking door te geven met een -e
argument in plaats van als het eerste niet-optie argument zoals je normaal ziet:
$ grep -v -e foo -e bar file
Dat zegt hetzelfde als wat je commando doet: regels afdrukken van file
die noch “foo” noch “bar” bevatten .
Onthoud dat het verwijderen van -v
dit volledig omkeert; het verandert ook de logische operatie! Je krijgt alle regels die “foo” of “bar” bevatten.
Answer
grep -Ev "word1|word2"
zou prima moeten werken
Reacties
- Als alternatief kun je egrep gebruiken en de backslash voor de pipe character:
egrep -v 'word1|word2
- Blijkt dat dit niet werkt met de Solaris grep. Ik heb de GNU grep geïnstalleerd en werkte perfect. Ik ' ga mijn vraag bewerken om deze Solaris-specifiek te maken.
- @rahmu
\|
is een GNU-grep extensie, maar je kunt hetzelfde bereiken op een draagbare manier met-E
en de|
operator.
-v
een negatie.not(A or B) == not(A) and not(B)