Czy istnieje prostszy sposób na zrobienie tego? grep -v foo file | grep -v bar
Prawdopodobnie istnieją bardzo eleganckie sposoby na zrobienie tego za pomocą egrep, ale jak przejść ze zwykłym starym grepem?
EDYCJA: grep -v "foo\|bar" file
wydaje się działać tylko z GNU grep. Jestem na Solarisie. Jakieś rozwiązanie?
Komentarze
Odpowiedź
Możesz mieć wiele testów w pojedyncze polecenie grep
, przekazując każde wyrażenie z argumentem -e
zamiast jako pierwszy argument niebędący opcją, jak zwykle:
$ grep -v -e foo -e bar file
To mówi to samo, co twoje polecenie: wypisuje wiersze z file
, które nie zawierają ani „foo”, ani „bar” .
Pamiętaj, że usunięcie -v
całkowicie odwraca to; zmienia również operację logiczną! Otrzymasz wszystkie wiersze zawierające „foo” lub „bar”.
Answer
grep -Ev "word1|word2"
powinno działać dobrze
Komentarze
- Alternatywnie możesz użyć egrep i pozostawić lewy ukośnik pionowa kreska:
egrep -v 'word1|word2
- Okazuje się, że to nie działa z grepem Solaris. Zainstalowałem GNU grep i działałem doskonale. ' Mam zamiar edytować moje pytanie, aby było specyficzne dla Solaris.
- @rahmu
\|
to GNU grep rozszerzenie, ale możesz osiągnąć to samo w przenośny sposób za pomocą operatora-E
i|
.
-v
jest negacją.not(A or B) == not(A) and not(B)