Я хотел бы выбрать строки, которые не соответствуют указанному шаблону, где я должен исключить несколько шаблонов. В качестве примера я хочу исключить строки, начинающиеся с ключевых слов apple и banana:

$ grep -v '^apple' foo.txt | grep -v '^banana' -

Мне интересно, есть ли способ сделать это с одним выражением или одним вызовом grep . Я пробовал следующее, но они, кажется, не работают, как надеялись:

$ grep -v "^apple" -v "^banana" foo.txt
$ grep -v "^(apple|banana)" foo.txt
$ grep -v "(^apple)|(^banana)" foo.txt

Как правильно исключить несколько шаблонов?

2 ответа2

3

Чтобы указать "альтернативные" совпадения, вы должны включить переключатель "E", например:

$ grep -Ev "^(apple|banana)" foo.txt
$ grep -Ev "(^apple)|(^banana)" foo.txt

Любая версия выше должна работать.

1

Вы также можете указать несколько шаблонов с -e .

grep -e '^apple' -e '^banana' -v foo.txt

grep -e '^apple' -e '^banana' foo.txt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .