Как известно, sed обрабатывает вход построчно. Если надо заменить многострочный паттерн, то можно воспользоваться флагом -z, который указывает, что конец строки теперь нуль-терминатор \0, а не обычный \n. Например,

echo -e "line1\n\nline2\n\n\nline3" | sed -z 's/\n\n*/\n/g'

выведет

line1
line2
line3

Но работает это только для GNU sed. Маковский такое не поддерживает, и подключить там многострочную обработку — это какая-то магия (которую я даже не буду пытаться запоминать и пробовать).