Диапазон шаблонов для многострочных шаблонов.Вот как вы это сделаете:
sed -n '/pat1/,/pat2/{/pat1\|pat2/!p}' inputfile
-n
- не печатать по умолчанию /pat1/,/pat2/
- внутри двух шаблонов включительно /pat1\|pat2/!p
- напечатать все, что не является одним из шаблонов
Возможно, вы спросите, что находится между двумя шаблонами на одной линии.Один из других ответов сделает это.
Редактировать:
Несколько примеров:
$ cat file1
aaaa bbbb cccc
123 start 456
this is what
I want
789 end 000
xxxx yyyy zzzz
$ sed -n '/start/,/end/{/start\|end/!p}' file1
this is what
I want
Вы можете сократить его, сказав sed
для повторного использования самого последнего шаблона (//
):
$ sed -n '/.*start.*/,/^[0-9]\{3\} end 0*$/{//!p}' file1
this is what
I want
Как видите, мне не пришлось дублировать сложное регулярное выражение во второй части команды.