Чтобы сохранить только 2 новых строки, вы можете попробовать это sed
sed '
/^$/!b
N
/../b
h
:A
y/\n/@/
/^@$/!bB
s/@//
$bB
N
bA
:B
s/^@//
/./ {
x
G
b
}
g
' infile
/ ^ $ /! B Если это пустая строка, не печатайте ее
N получить новую строку
/ .. / b, если эта новая строка не пуста, выведите 2 строки
h хранит 2 пустые строки в буфере удержания
: этикетка A
На данный момент в буфере паттернов всегда есть 2 строки, а первая пуста
y / \ n / @ / заменить \ n на @ (вы можете выбрать другой символ, которого нет в вашем файле)
/ ^ @ $ /! BB Если вторая строка не пуста, переходите к B
s / @ // удалить @
$ bB Если последняя строка, переходите к B
На данный момент в шаблонном пространстве есть 1 пустая строка
N получить последнюю строку
bA перейти к A
: метка B B
s / ^ @ // удалить символ @ в начале строки
/. / {Если последняя строка не пуста
x шаблон обмена и удержание буфера
G добавить буфер удержания в пространство паттернов
b перейти к концу
}
g заменить пространство шаблона (пустое) на пространство удержания
печать пробела