Ich brauche etwas wie:
grep ^"unwanted_word"XXXXXXXX
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
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.
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
$
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.
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.