Это может работать для вас (GNU sed):
sed -z 's/##[^#]*\(#[^#][^#]*\)*##\n\?//g' file
Опция -z
позволяет всему файлу быть скопированным в пространство шаблона sed.Регулярное выражение состоит из трех частей.Первая часть соответствует ##
, за которым следует ноль или более не #
.Вторая часть соответствует нулю или более группе символов, состоящей из одного #
, за которым следует не #
, за которым следует ноль или более не #
.Третья часть соответствует ##
и возможному переводу строки.Это регулярное выражение удаляет такие совпадения глобально по всему файлу.
Это можно немного сократить, используя опцию -r
, чтобы подсластить окончательное предложение:
sed -rz 's/##[^#]*(#[^#]+)*##\n?//g' file
Если версия sed делаетне предлагать ни один из вариантов, тогда другое решение:
sed 'H;$!d;x;s/.//;s/##[^#]*\(#[^#][^#]*\)*##\n\?//g' file
Следует отметить, что в приведенном выше примере все ##
начинаются или заканчиваются в начале или конце строки и т. д.приведенное ниже решение также может соответствовать требованиям:
sed 's/^##/,/##$/d' file