Однострочник, который Андре Миллер опубликовал выше, работает, за исключением последних версий sed, когда входной файл заканчивается пустой строкой и без символов. На моем Mac мой процессор просто вращается.
Бесконечный цикл, если последняя строка пуста и не содержит символов :
sed '$!N; /^\(.*\)\n\1$/!P; D'
Не зависает, но вы теряете последнюю строку
sed '$d;N; /^\(.*\)\n\1$/!P; D'
Объяснение в самом конце sed FAQ :
Специалист по GNU sed считает, что, несмотря на проблемы с переносимостью
это может привести к изменению команды N на печать (вместо
удалить) пространство шаблона более соответствовало интуиции
о том, как команда «добавить следующую строку» должна вести себя.
Другим фактом, способствующим изменению, было то, что "{N; команда;}" будет
удалить последнюю строку, если файл имеет нечетное количество строк, но
выведите последнюю строку, если файл имеет четное количество строк.
Для преобразования скриптов, которые использовали прежнее поведение N (удаление
пространство шаблона при достижении EOF) для сценариев, совместимых с
все версии sed, меняют одинокое "N;" в «$ d; N;» .