Satu-liner yang diposting Andre Miller di atas berfungsi kecuali untuk versi sed terbaru ketika file input berakhir dengan baris kosong dan tanpa karakter. Di Mac saya, CPU saya hanya berputar.
Infinite loop jika baris terakhir kosong dan tidak memiliki karakter :
sed '$!N; /^\(.*\)\n\1$/!P; D'
Tidak menggantung, tetapi Anda kehilangan baris terakhir
sed '$d;N; /^\(.*\)\n\1$/!P; D'
Penjelasannya ada di bagian paling akhir dari FAQ sed :
Pemelihara GNU merasa bahwa terlepas dari masalah portabilitas
ini akan menyebabkan, mengubah perintah N untuk mencetak (daripada
menghapus) ruang pola lebih konsisten dengan intuisi seseorang
tentang bagaimana perintah untuk "menambahkan baris berikutnya" harus berperilaku.
Fakta lain yang mendukung perubahan adalah bahwa "{N; command;}" akan
menghapus baris terakhir jika file memiliki jumlah ganjil baris, tetapi
mencetak baris terakhir jika file memiliki jumlah garis genap.
Untuk mengonversi skrip yang menggunakan perilaku N sebelumnya (menghapus
ruang pola setelah mencapai EOF) menjadi skrip yang kompatibel dengan
semua versi sed, ubah "N;" ke "$ d; N;" .
uniq
saja sudah cukup.