Gibt es einen einfacheren Weg, dies zu tun?
grep -v foo file | grep -v bar
Es gibt wahrscheinlich sehr elegante Möglichkeiten, dies mit egrep zu tun, aber wie geht man mit einfachem altem Grep um?
EDIT: grep -v 'foo\|bar' file
scheint nur mit GNU grep zu funktionieren. Ich bin auf Solaris. Irgendeine Lösung dafür?
-v
Flag eine Negation.not(A or B) == not(A) and not(B)
Antworten:
Sie können mehrere Tests in einem einzigen
grep
Befehl durchführen, indem Sie jeden Ausdruck mit einem-e
Argument übergeben, anstatt als erstes Argument ohne Option, wie Sie normalerweise sehen:Das sagt dasselbe, was Ihr Befehl tut: Druckzeilen
file
davon enthalten weder "foo" noch "bar".Denken Sie daran, dass das Entfernen dies
-v
vollständig umkehrt. es ändert auch die logische Operation! Sie erhalten alle Zeilen, die "foo" oder "bar" enthalten.quelle
grep -Ev 'word1|word2'
sollte gut funktionierenquelle
egrep -v 'word1|word2
\|
ist eine GNU- Grep- Erweiterung, aber Sie können dasselbe auf tragbare Weise mit-E
und dem|
Bediener erreichen.