Ich brauche so etwas wie:
grep ^"unwanted_Word"XXXXXXXX
Sie können dies auch mit der Option -v
(für --invert-match
) von grep als:
grep -v "unwanted_Word" file | grep XXXXXXXX
grep -v "unwanted_Word" file
filtert die Zeilen mit dem unwanted_Word
und grep XXXXXXXX
listet nur Zeilen mit dem Muster XXXXXXXX
auf.
EDIT:
Aus Ihrem Kommentar geht hervor, dass Sie alle Zeilen ohne den unwanted_Word
auflisten möchten. In diesem Fall brauchen Sie nur:
grep -v 'unwanted_Word' file
Ich verstand die Frage als "Wie kann ich ein Wort finden, aber ein anderes ausschließen", für die eine Lösung zwei Greps in Serie sind: Erstens grep das gesuchte "Word1" finden, zweitens grep "Word2" ausschließen:
grep "Word1" | grep -v "Word2"
In meinem Fall: Ich muss zwischen "plot" und "#plot" unterscheiden, was mit der "Word" -Option von grep nicht möglich ist ("#" ist kein alphanumerisches Zeichen).
Hoffe das hilft.
Wenn Ihr grep
reguläre Perl-Ausdrücke mit der Option -P
unterstützt, können Sie Folgendes tun (wenn bash; wenn tcsh, müssen Sie den !
entziehen):
grep -P '(?!.*unwanted_Word)keyword' file
Demo:
$ cat file
foo1
foo2
foo3
foo4
bar
baz
Lassen Sie uns nun alle foo
mit Ausnahme von foo3
auflisten.
$ grep -P '(?!.*foo3)foo' file
foo1
foo2
foo4
$
Die richtige Lösung ist die Verwendung von grep -v "Word" file
mit dem entsprechenden awk
:
awk '!/Word/' file
Wenn Sie jedoch eine komplexere Situation haben, in der XXX
angezeigt werden soll und YYY
nicht angezeigt werden soll, ist awk
praktisch anstatt mehrere grep
s zu leiten:
awk '/XXX/ && !/YYY/' file
# ^^^^^ ^^^^^^
# I want it |
# I don't want it
Man kann sogar etwas Komplexeres sagen. Zum Beispiel: Ich möchte, dass diese Zeilen entweder XXX
oder YYY
, aber nicht ZZZ
enthalten:
awk '(/XXX/ || /YYY/) && !/ZZZ/' file
usw.
Übereinstimmungen mit grep -v invertieren:
grep -v "unwanted Word" file pattern
grep bietet die Option '-v' oder '--invert-match', um nicht übereinstimmende Zeilen auszuwählen.
z.B.
grep -v 'unwanted_pattern' file_name
Dadurch werden alle Zeilen aus der Datei dateiname ausgegeben, die kein 'unerwünschtes_muster' enthält.
Wenn Sie das Muster in mehreren Dateien in einem Ordner suchen, können Sie die Option für die rekursive Suche wie folgt verwenden
grep -r 'wanted_pattern' * | grep -v 'unwanted_pattern'
Hier versucht grep, alle Vorkommen von 'wanted_pattern' in allen Dateien des aktuellen Verzeichnisses aufzulisten und an second grep weiterzuleiten, um das 'unerwünschte_pattern' herauszufiltern. '|' - pipe weist Shell an, die Standardausgabe des linken Programms (grep -r 'wanted_pattern' *) mit der Standardeingabe des rechten Programms (grep -v 'unusual_pattern') zu verbinden.
Die Option -v
zeigt Ihnen alle Linien, die nicht mit dem Muster übereinstimmen.
grep -v ^unwanted_Word