Một lớp lót mà Andre Miller đã đăng ở trên hoạt động ngoại trừ các phiên bản gần đây của sed khi tệp đầu vào kết thúc bằng một dòng trống và không có ký tự. Trên máy Mac, CPU của tôi chỉ quay.
Vòng lặp vô hạn nếu dòng cuối cùng trống và không có ký tự :
sed '$!N; /^\(.*\)\n\1$/!P; D'
Không treo, nhưng bạn mất dòng cuối cùng
sed '$d;N; /^\(.*\)\n\1$/!P; D'
Lời giải thích nằm ở phần cuối của câu hỏi thường gặp về sed :
Người duy trì GNU sed cảm thấy rằng mặc dù có vấn đề về tính di động,
điều này sẽ gây ra, việc thay đổi lệnh N để in (thay vì
xóa) không gian mẫu phù hợp hơn với trực giác của một người
về cách một lệnh "nối dòng tiếp theo" phải hành xử.
Một thực tế khác có lợi cho sự thay đổi là "{N; lệnh;}" sẽ
xóa dòng cuối cùng nếu tệp có số dòng lẻ, nhưng
in dòng cuối nếu tệp có số dòng chẵn.
Để chuyển đổi các tập lệnh đã sử dụng hành vi trước đây của N (xóa
không gian mẫu khi đạt EOF) thành tập lệnh tương thích với
tất cả các phiên bản của sed, hãy thay đổi "N;" thành "$ d; N;" .
uniq
một mình là đủ.