вместе используйте ключи grep -A и -v - PullRequest
0 голосов
/ 01 февраля 2019

grep -v инвертирует соответствие, поэтому я могу исключить строки из входных данных / файлов.

Возможно ли исключить две строки, если шаблон соответствует?

printf "foo\nbar\nbaz\n" | grep -A1 -v foo

не работает.Я ожидаю, что этот код выводит только baz, но выводит

bar
baz

1 Ответ

0 голосов
/ 03 февраля 2019

Флаги -A, -B и -C заставляют печатать указанное количество строк контекста для каждой строки, которая удовлетворяет условию поиска.Когда вы используете -v, условие поиска инвертируется, поэтому выбранные строки - это те, которые не соответствуют шаблону.Следовательно, grep -A1 -v foo печатает все строки, которые не содержат foo, а также строки, следующие за строками, которые не содержат foo.

Я понимаю, что это не то, что вы ищетедля, но это способ grep указан для работы.Насколько я знаю, не существует опции, которая подавляет печать строк после совпадения с шаблоном.

Тем не менее, достаточно просто выполнить это умение, используя awk:

awk '/foo/{c=2} c{c--;next;} 1'

Обратите внимание, что awk использует расширенные регулярные выражения Posix, например grep -E.Регулярное выражение должно быть окружено косой чертой, а это означает, что вам нужно убирать обратную косую черту от любой косой черты, с которой необходимо сопоставить.Кроме этого, он будет очень похож на grep.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...