Czy istnieje prostszy sposób na zrobienie tego?
grep -v foo file | grep -v bar
Prawdopodobnie istnieją bardzo eleganckie sposoby, aby to zrobić za pomocą egrep, ale jak przejść do zwykłego starego grepa?
EDYCJA: grep -v 'foo\|bar' file
wydaje się działać tylko z GNU grep. Jestem na Solarisie. Jakieś rozwiązanie tego?
-v
flaga jest negacją.not(A or B) == not(A) and not(B)
Odpowiedzi:
Można wykonać wiele testów w jednym
grep
poleceniu, przekazując każde wyrażenie z-e
argumentem zamiast jako pierwszy argument nie będący opcją, jak zwykle:Oznacza to to samo, co polecenie: wypisuje z niego wiersze,
file
które nie zawierają ani „foo”, ani „bar”.Pamiętaj, że usunięcie
-v
całkowicie odwraca to; zmienia także logiczną operację! Otrzymasz wszystkie wiersze zawierające „foo” lub „bar”.źródło
grep -Ev 'word1|word2'
powinien działać dobrzeźródło
egrep -v 'word1|word2
\|
jest rozszerzeniem GNU grep, ale można osiągnąć to samo w przenośny sposób z-E
i|
operatora.