$ sed -nE '/^START$/h;/^END$/{x;/^START.*\nFLAG 0(\n|$)/{p;x;p;x;};};/^START$/!{x;/^START/!x;/^START/{x;H;};};' tst.sed А у меня вот так -
sed -n '/^START$/{h;d};x;/./!{x;d};x;H;/^flag 0$/!{/^flag /bc};/^END$/!d;x;/./p;:c;s/.*//;h'
>Логика следующая:
Накапливаем "правильние" строки в hold-е следующим образом:
Если строка =="START" - "просто" поместить её в буфер = начать накопление [заново].
(до [первого] START буфер пустой, если "вдруг" START повторился - сбрасываем, чтоб не было вложений)
Если буфер пуст (не накапливаем строки, вне блока START-END), читать следующую строку == отбросить тек строку.
[Буфер не пуст,в буфере уже есть START] -- добавить тек.строку к нему.
Если строка - flag, но не "flag 0", то сбросить буфер [- не накапливать больше].
Если "END", напечатать накопленное, если там что-то было, и очистить буфер. (буфер пустой = ждём слкдующего START)
PS: Какой выразительный язык!(тм) Я начинаю догадываться, почему не люблю perl... Ж))))
PPS: ...постоянно путаю n вместо d - к чему бы это? :-/