2012-04-25 29 views
6

Tôi đang sử dụng lệnh diff để so sánh hai tệp văn bản. Họ cần phải được thực sự phù hợp.Diff-command: không in các dòng khác nhau nhưng vẫn cho biết hai tệp khác nhau

Vì vậy, tôi sử dụng diff:

diff binary.out binary.expected

(.. Bằng cách này, những tệp KHÔNG tập tin nhị phân Họ đang tập tin văn bản Tôi gọi họ là nhị phân vì đó là tên của dự án)

và có

Binary files binary.out and binary.expected differ

Khi tôi sử dụng một công cụ diff, thông minh nhất của tất cả (AKA hum một) và không có gì khác biệt giữa hai tệp.

Có ai biết điều gì đang xảy ra ở đây không?

Cảm ơn.

+0

'diff' có khái niệm" văn bản "hẹp. Bạn có thể có các ký tự đặc biệt mà không thực sự là tất cả những đặc biệt đó: dấu trọng âm, trả về vận chuyển. – geekosaur

+0

Tôi không nghĩ rằng các tệp văn bản của tôi có các ký tự đặc biệt. Tất cả chúng chứa từ "SUM BINARY", chữ số '0's và' 1's và một vài ký tự newline. Nhưng ngay cả như vậy, điều đó không giải thích được trong khi diff coi tập tin nhị phân của tôi là –

+0

Nếu bạn không có trình tự LF/CR (dòng nạp/chuyển dòng) ở cuối mỗi chuỗi tệp của bạn thì trên Windows hầu hết các trình soạn thảo văn bản sẽ coi những tệp này là tệp nhị phân. Những biểu tượng này là vô hình khi bạn đang tìm kiếm trên văn bản ở chế độ văn bản, nhưng cố gắng tìm kiếm các tệp ở chế độ nhị phân và bạn sẽ thấy 0xD 0xA ở cuối mỗi dòng. – Flot2011

Trả lời

2

Đảm bảo bỏ qua khoảng trắng trong các tùy chọn khác.

Nó cũng có thể thấy các ký tự Unicode và diễn giải nó dưới dạng nhị phân. Xem liệu công cụ tìm khác biệt của bạn có tùy chọn buộc chế độ văn bản hay không.

5

diff từ diffutils nói như sau về văn bản/nhị phân:

diff xác định liệu một file có văn bản hoặc nhị phân bằng cách kiểm tra vài byte đầu tiên trong tập tin; số byte chính xác là hệ thống phụ thuộc, nhưng nó thường là vài nghìn. Nếu mỗi byte trong phần đó của tệp là không null, diff coi tệp là văn bản; nếu không nó coi tập tin là nhị phân.

do đó GNU diff có định nghĩa khá cởi mở về văn bản là gì và việc sử dụng tùy chọn --text để buộc tệp này làm văn bản ít khi cần thiết.

Bạn đã kiểm tra xem binary.out hoặc binary.expected có chứa các ký tự null không? Phiên bản khác biệt của bạn là gì?

Các vấn đề liên quan