645 Stimmen

Wie kann ich ein Wort mit grep ausschließen?

Ich brauche etwas wie:

grep ^"unwanted_word"XXXXXXXX

1108voto

codaddict Punkte 426877

Sie können dies tun mit -v (für --invert-match ) Option von grep als:

grep -v "unwanted_word" file | grep XXXXXXXX

grep -v "unwanted_word" file werden die Zeilen gefiltert, die das unwanted_word y grep XXXXXXXX listet nur Zeilen mit dem Muster XXXXXXXX .

EDITAR:

Aus Ihrem Kommentar sieht es so aus, als wollten Sie alle Zeilen ohne das unwanted_word . In diesem Fall ist alles, was Sie brauchen:

grep -v 'unwanted_word' file

120voto

JPGConnolly Punkte 1190

Ich habe die Frage so verstanden: "Wie finde ich ein Wort, schließe aber ein anderes aus?", wofür eine Lösung zwei greps hintereinander sind: Der erste grep findet das gesuchte "Wort1", der zweite grep schließt "Wort2" aus:

grep "word1" | grep -v "word2"

In meinem Fall: Ich muss zwischen "plot" und "#plot" unterscheiden, was mit der Option "word" von grep nicht möglich ist ("#" ist kein alphanumerisches Zeichen).

Ich hoffe, das hilft.

46voto

codaddict Punkte 426877

Wenn Ihr grep unterstützt Perl reguläre Ausdrücke mit -P Option können Sie tun (wenn bash; wenn tcsh müssen Sie die ! ):

grep -P '(?!.*unwanted_word)keyword' file

Demo:

$ cat file
foo1
foo2
foo3
foo4
bar
baz

Lassen Sie uns nun eine Liste aller foo außer foo3

$ grep -P '(?!.*foo3)foo' file
foo1
foo2
foo4
$

46voto

fedorqui Punkte 249453

Die richtige Lösung ist die Verwendung von grep -v "word" file mit seinem awk gleichwertig:

awk '!/word/' file

Wenn Sie jedoch eine komplexere Situation haben, in der Sie z. B., XXX zu erscheinen und YYY no zu erscheinen, dann awk ist praktisch, statt mehrere Leitungen zu verlegen grep s:

awk '/XXX/ && !/YYY/' file
#    ^^^^^    ^^^^^^
# I want it      |
#            I don't want it

Sie können auch etwas Komplexeres sagen. Zum Beispiel: Ich möchte, dass diese Zeilen entweder XXX o YYY , aber nicht ZZZ :

awk '(/XXX/ || /YYY/) && !/ZZZ/' file

usw.

13voto

garima Punkte 5064

Umkehrung der Übereinstimmung mit grep -v:

grep -v "unwanted word" file pattern

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X