Есть ли более простой способ сделать это?
grep -v foo file | grep -v bar
Вероятно, есть очень элегантные способы сделать это с помощью egrep, но как использовать старый добрый grep?
РЕДАКТИРОВАТЬ: grep -v 'foo\|bar' file
кажется, работает только с GNU grep. Я на Солярисе. Любое решение для этого?
-v
флаг является отрицанием.not(A or B) == not(A) and not(B)
Ответы:
Вы можете иметь несколько тестов в одной
grep
команде, передавая каждое выражение с-e
аргументом вместо первого аргумента без опций, как вы обычно видите:Это говорит о том же, что и ваша команда: выводить строки,
file
которые не содержат ни «foo», ни «bar».Имейте в виду, что удаление
-v
полностью инвертирует это; это также меняет логическую операцию! Вы получаете все строки, которые содержат «foo» или «bar».источник
grep -Ev 'word1|word2'
должно работать просто отличноисточник
egrep -v 'word1|word2
\|
является расширением GNU grep, но вы можете достичь того же самого с-E
помощью|
оператора.