Очень быстрый способ использования sed
sed '/^$/d;G'
При этом удаляются все пустые строки с помощью команды /^$/d
и добавляется содержимое области удержания (которая пуста) кпробел с новой строкой между (G
).
Очень быстрый способ использования awk
awk 'BEGIN{RS="";FS="\n";ORS=OFS="\n\n"}{$1=$1}1'
Как это работает:
awk знает записи концепта (которые по умолчанию являются строками), и вы можете определить запись по ее разделителю записей RS
.Если вы установите значение RS
для пустой строки, оно будет соответствовать любому множеству пустых строк в качестве разделителя записей.Значение ORS
является разделителем выходных записей.В нем указывается, какой разделитель должен быть напечатан между двумя последовательными записями.Это установлено на два символа.Это, однако, не решает проблему, когда у вас есть многострочная запись.Поэтому для этого мы определяем поля (по умолчанию слова).Разделитель полей FS
определяется как один символ , так что каждое поле представляет собой строку.А выходной разделитель полей определяется как два символа.Мы преобразуем FS
в OFS
, переназначая первое поле себе {$1=$1}
Наконец, оператор 1
является сокращением для {print $0}
, который печатает текущую запись, за которой следует выходной разделитель записей ORS
.