Несколько шаблонов с несколькими контекстами? - PullRequest
4 голосов
/ 18 мая 2011

Я хочу, чтобы grep выполнял поиск двух шаблонов и выводил разные строки контекста для каждого соответствия: например, когда оно соответствует «предупреждению», выводит 1 строку до и 1 строку после - и когда оно соответствует «ошибке», вывод 1строка до и 2 строки после;поэтому я попробовал это:

$ echo -ne "1\n2\n3\n4\nwarning\n5\n6\n7\n8\nerror\n9\n10\n11\n12\n" | grep -e "warning" -A 1 -B 1 -e "error" -B 1 -A 2
4
warning
5
6
--
8
error
9
10

... однако, к сожалению, это не работает - по-видимому, только окончательные аргументы -B / -A выполняются для всех шаблонов.

Кто-нибудь знает, как создать отдельный контекст для каждого шаблона поиска?

1 Ответ

4 голосов
/ 18 мая 2011

Как насчет этого варианта, используя sed?

sed -n '/warning/{x;p;x;p;n;p};/error/{x;p;x;p;n;p;n;p};h'

Где x означает Обмен содержимым пробелов и шаблонов ,
p означает Печать текущего пространства шаблона
n означает Считать следующую строку ввода в пространство шаблона
h означает Копировать пространство шаблона для хранения пробела
sed -n означает подавить автоматическую печать пространства шаблона (т.е. печать только при возникновении p)

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