ИМХО, это легче сделать с awk
, но, пожалуйста, просто игнорируйте, если это не вариант для вас.
Итак, каждый раз, когда я вижу строку, начинающуюся с .groupA
, я устанавливаю флаг d
, чтобы сказать, что я удаляю, и затем перехожу к следующей строке. Если я вижу строку, начинающуюся с +
, и в настоящее время я удаляю ее, я перехожу к следующей строке. Если я вижу что-то еще, я изменяю флаг, чтобы сказать, что я больше не удаляю, и печатаю строку:
awk '/^\.groupA/ {d=1; next}
/^+/ && d==1 {next}
{d=0; print}' file
Пример вывода
** Example **
abcdef ghijkl
.groupB abc def
+ JKL
+ MNO
+ GHI
opqrst vwxyz
Вы можете разыграть его как однострочник вот так:
awk '/^\.groupA/{d=1; next} d==1 && /^+/ {next} {d=0;print}' file