Khác biệt báo cáo nhưng cả hai dòng là như nhau


55

Tôi tìm 2 tập tin và nhận được

1c1
< 1
---
> 1

Cả hai tập tin chỉ chứa "1". Điều này khác nhau như thế nào?


xin vui lòng gửi nội dung của cả hai tập tin;)
Rinzwind

5
Nếu bạn đang sử dụng diff, -utùy chọn có thể dễ đọc hơn cho con người.
Lekensteyn

@Rinzwind, cả hai tệp chỉ chứa văn bản 1, nhưng nếu bạn muốn xem thêm hãy xem pastebin.com/byiqdie1
Jiew Meng

Lấy làm tiếc. Nó không phải khi tôi làm điều đó. Phải có một cái gì đó khác biệt. Thực hiện cp 1 2(ghi đè lên 2) và sau đó bạn có thể chắc chắn 100% b chúng giống nhau;)
Rinzwind

2
vimdiff file1 file2? : D
dylnmc

Câu trả lời:


68

Dòng thứ 1: alà viết tắt của thêm, dđể xóa và cthay đổi. Số dòng của tệp gốc xuất hiện trước các chữ cái này và các số của tệp sửa đổi xuất hiện sau chữ cái.

Dòng thứ 2: dòng có <từ tệp 1 và khác với tệp 2.

Dòng thứ 3 là một dải phân cách.

Dòng thứ 4: dòng có >từ tệp 2 và khác với tệp 1.

(Nếu bạn từng thấy =nó có nghĩa là các dòng giống nhau trong cả hai tệp)

Và vấn đề của bạn có thể là khoảng trắng hoặc các ký tự không thể đọc được khác: chúng cũng gây ra sự khác biệt.

Có một số tùy chọn để thao tác đầu ra.

Thí dụ:

rinzwind @ Discworld: ~ $ 1 
kiểm tra
kiểm tra2
kiểm tra3
rinzwind @ Discworld: ~ $ 2
kiểm tra
kiểm tra2  
kiểm tra3

định dạng theo ngữ cảnh:

rinzwind @ Discworld: ~ $ diff -c 1 2
*** 1 2011-08-13 17: 05: 40.433966684 +0200
--- 2 2011-08-13 17: 11: 24.369966629 +0200
****** / TÌM HIỂU
*** 1,3 ****
  kiểm tra
! kiểm tra2
  kiểm tra3
--- 1,3 ----
  kiểm tra
! kiểm tra2  
  kiểm tra3

Một "!" đại diện cho một sự thay đổi giữa các dòng tương ứng trong hai tập tin. "+" Đại diện cho việc thêm một dòng, trong khi một khoảng trắng biểu thị một dòng không thay đổi. Ở đầu bản vá là thông tin tệp, bao gồm đường dẫn đầy đủ và dấu thời gian. Ở đầu mỗi hunk là các số dòng áp dụng cho sự thay đổi tương ứng trong các tệp. Một phạm vi số xuất hiện giữa các bộ ba dấu sao áp dụng cho tệp gốc, trong khi bộ ba dấu gạch ngang áp dụng cho tệp mới. Phạm vi hunk xác định số dòng bắt đầu và kết thúc trong tệp tương ứng.

Mở rộng trên nhận xét của Lekensteyn về định dạng hợp nhất:

rinzwind @ Discworld: ~ $ diff -u 1 2
--- 1 2011-08-13 17: 05: 40.433966684 +0200
+++ 2 2011-08-13 17: 11: 24.369966629 +0200
@@ -1,3 +1,3 @@
 kiểm tra
-test2
+ kiểm tra2  
 kiểm tra3

Định dạng bắt đầu với tiêu đề hai dòng giống như định dạng ngữ cảnh, ngoại trừ tệp gốc có trước "---" và tệp mới có trước "+++". Theo sau đây là một hoặc nhiều khối thay đổi có chứa sự khác biệt dòng trong tệp. Các dòng theo ngữ cảnh không thay đổi được đi trước bởi một ký tự khoảng trắng, các dòng bổ sung được đi trước bởi một dấu cộng và các dòng xóa được đi trước bởi một dấu trừ.

Một số tùy chọn hữu ích:

-b Bỏ qua những thay đổi về số lượng khoảng trắng.

-w Bỏ qua tất cả khoảng trắng.

-B Bỏ qua tất cả các dòng trống.

-y sản lượng trong 2 colums.


Làm cách nào để kiểm tra nếu có bất kỳ ký tự ẩn nào? Có cách nào để bỏ qua các ký tự ẩn (có thể chỉ loại trừ các dòng & tab mới không?) Tôi cho rằng hầu hết các ký tự ẩn là vô tình?
Jiew Meng

Tôi đưa vào một số tùy chọn hữu ích (được sao chép từ man diff;))
Rinzwind

Tôi nhận thấy sử dụng cờ -b hoạt động. Hmm Tôi không thấy sự khác biệt về khoảng trắng trong gedit :)
Jiew Meng

@JiewMeng Chạy od -x1ztrên cả hai tệp và so sánh odđầu ra. Nó sẽ tìm thấy bất kỳ sự khác biệt ẩn giữa các tập tin.
lgarzo

6

Tôi thấy od (kết xuất bát phân) có ích khi so sánh các tệp w / ký tự không in được (đặc biệt là các tệp mà quyết định khác là "nhị phân" và do đó chỉ cho bạn biết rằng chúng khác nhau).

Trong ví dụ dưới đây, tôi tạo một cặp tệp có thể giống như tệp gốc, sau đó thực hiện khác với đầu ra ban đầu; tiếp theo tôi làm khác với một vài kết quả "od" khác nhau.

$ echo 1> 1
$ echo "1"> 2
$ diff 1 2

1c1  
< 1  
- ---  
> 1   

$ od -c 1> 1.od
$ od -c 2> 2.od
$ diff 1.od 2.od

1,2c1,2
< 0000000   1  \n
< 0000002
---
> 0000000   1      \n
> 0000003

$ od -Ax -c -t x1 1> 1.od
$ od -Ax -c -t x1 2> 2.od
$ diff 1.od 2.od

1,3c1,3
< 000000   1  \n
<         31  0a
< 000002
---
> 000000   1      \n
>         31  20  0a
> 000003

1

tôi đã có cùng một vấn đề và tôi tìm thấy một giải pháp có thể giúp đỡ, sử dụng lệnh:

dos2unix <file1> <file2>

một trong số chúng có thể ở định dạng dos / windows và một định dạng UNIX khác

Sau khi tôi làm điều này, tất cả đều tốt!



Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.