Hiểu biết về đầu ra khác


89

Tôi có file1.txt

this is the original text  
line2  
line3  
line4  
happy hacking !  

file2.txt

this is the original text  
line2  
line4  
happy hacking !  
GNU is not UNIX  

nếu tôi làm: diff file1.txt file2.txttôi nhận được:

3d2  
< line3  
5a5  
> GNU is not UNIX  

Làm thế nào là đầu ra thường được giải thích? Tôi nghĩ rằng điều đó <có nghĩa là loại bỏ nhưng những gì làm 3d2hoặc 5a5có nghĩa là gì?

Nếu tôi làm:

$ diff -u file1.txt file2.txt  
--- file1.txt        2013-07-06 17:44:59.180000000 +0200  
+++ file2.txt        2013-07-06 17:39:53.433000000 +0200  
@@ -1,5 +1,5 @@  
 this is the original text  
 line2  
-line3  
 line4  
 happy hacking !  
+GNU is not UNIX  

Kết quả rõ ràng hơn nhưng @@ -1,5 +1,5 @@có nghĩa là gì?

Câu trả lời:


98

Trong đầu diffra đầu tiên của bạn (được gọi là "Normall diff"), ý nghĩa như sau

< - biểu thị các dòng trong file1.txt

> - biểu thị các dòng trong file2.txt

3d25a5biểu thị số dòng bị ảnh hưởng và hành động nào đã được thực hiện. dlà viết tắt của từ xóa, aviết tắt của từ thêm (và clà viết tắt của thay đổi). số bên trái của ký tự là số dòng trong file1.txt, số bên phải là số dòng trong file2.txt. Vì vậy, 3d2cho bạn biết rằng dòng thứ 3 trong file1.txt đã bị xóa và có dòng số 2 trong file2.txt (hoặc tốt hơn để nói rằng sau khi xóa, bộ đếm dòng đã quay trở lại dòng số 2). 5a5cho bạn biết rằng chúng tôi đã bắt đầu từ dòng số 5 trong file1.txt (thực sự trống sau khi chúng tôi xóa một dòng trong hành động trước đó), đã thêm dòng và dòng được thêm này là số 5 trong file2.txt.

Đầu ra của diff -ulệnh được định dạng khác một chút (được gọi là định dạng "unified diff"). Ở đây diffcho chúng ta thấy một đoạn văn bản duy nhất, thay vì hai văn bản riêng biệt. Trong dòng @@ -1,5 +1,5 @@, phần -1,5liên quan đến file1.txt và phần +1,5với file2.txt. Họ nói với chúng tôi rằng diffsẽ hiển thị một đoạn văn bản dài 5 dòng bắt đầu từ dòng số 1 trong file1.txt. Và tương tự về file2.txt - diffhiển thị cho chúng ta 5 dòng bắt đầu từ dòng 1.

Như tôi đã nói, các dòng từ cả hai tệp được hiển thị cùng nhau

 this is the original text  
 line2  
-line3  
 line4  
 happy hacking !  
+GNU is not UNIX  

Ở đây -biểu thị các dòng đã bị xóa khỏi file1.txt và +biểu thị các dòng đã được thêm vào.


25

Tóm tắt :

Cho a diff file1 file2, <có nghĩa là dòng bị thiếu file2>có nghĩa là dòng bị thiếu file1. Các 3d25a5có thể được bỏ qua, chúng là các lệnh patchthường được sử dụng với diff.

Trả lời đầy đủ :

Nhiều tiện ích * nix cung cấp hướng dẫn sử dụng TeXinfo cũng như các mantrang đơn giản hơn . bạn có thể truy cập chúng bằng cách chạy info command, ví dụ info diff. Trong trường hợp này, phần bạn quan tâm là:

2.4.2 Mô tả chi tiết về định dạng bình thường


Định dạng đầu ra bình thường bao gồm một hoặc nhiều khối khác nhau; mỗi hunk hiển thị một khu vực nơi các tập tin khác nhau. Hunk định dạng bình thường trông như thế này:

 CHANGE-COMMAND
 < FROM-FILE-LINE
 < FROM-FILE-LINE...
 ---
 > TO-FILE-LINE
 > TO-FILE-LINE...

Có ba loại lệnh thay đổi. Mỗi dòng bao gồm một số dòng hoặc phạm vi dòng được phân tách bằng dấu phẩy trong tệp đầu tiên, một ký tự duy nhất cho biết loại thay đổi cần thực hiện và số dòng hoặc phạm vi dòng được phân tách bằng dấu phẩy trong tệp thứ hai. Tất cả các số dòng là số dòng gốc trong mỗi tệp. Các loại lệnh thay đổi là:

`LaR'
     Add the lines in range R of the second file after line L of the
     first file.  For example, `8a12,15' means append lines 12-15 of
     file 2 after line 8 of file 1; or, if changing file 2 into file 1,
     delete lines 12-15 of file 2.

`FcT'
     Replace the lines in range F of the first file with lines in range
     T of the second file.  This is like a combined add and delete, but
     more compact.  For example, `5,7c8,10' means change lines 5-7 of
     file 1 to read as lines 8-10 of file 2; or, if changing file 2 into
     file 1, change lines 8-10 of file 2 to read as lines 5-7 of file 1.

`RdL'
     Delete the lines in range R from the first file; line L is where
     they would have appeared in the second file had they not been

4

Tôi đề nghị sử dụng:

diff -rupP file1.txt file2.txt > result.patch

Sau đó, khi bạn đọc result.patch, bạn sẽ biết ngay sự khác biệt.

Đây là ý nghĩa của các công tắc dòng lệnh:

-r : đệ quy

-u : hiển thị số dòng

-p (nhỏ): hiển thị sự khác biệt trong các hàm C

-P (viết hoa): trong trường hợp có nhiều tệp, đường dẫn đầy đủ được hiển thị


3

Các câu trả lời trên là tốt. Tuy nhiên, khi mới bắt đầu, tôi thấy chúng hơi khó hiểu và khi tìm kiếm thêm, tôi đã tìm thấy một liên kết rất hữu ích: Linux Diff Command & Ví dụ

Trang web giải thích khái niệm này một cách đơn giản và dễ hiểu.

Lệnh Diff dễ hiểu hơn nếu bạn xem xét nó theo cách này:

Về cơ bản, nó đưa ra một tập hợp các hướng dẫn về cách thay đổi một tệp để làm cho nó giống hệt với tệp thứ hai.

Mỗi trường hợp sau đây được giải thích tốt:

a để thêm, c để thay đổi, d để xóa


2

Đổi tên những thứ để giúp bạn nhớ!

diff  <file-to-edit>  <file-with-updates>   #Rather than diff f1 f2

Các kết quả hoạt động trên tệp để chỉnh sửa (tệp1), áp dụng các bản cập nhật khác nhau cho nó.


Tương tự, tôi thấy những đổi tên này hữu ích để khái niệm hóa kết quả:

Xóa = 'xóa' & Thêm = 'chèn'.

2,4d1 --- D (s) - d -N --- d elete (' remove ') D line (s). Sau đó đồng bộ hóa tại dòng N trong cả hai.

4a2,4 --- N- a -U (s) --- Tại dòng N, một (' insert ') cập nhật dòng (s) U

Lưu ý: Chúng gần như đối xứng.


Thay đổi = 'xóa và chèn'.

2,4c5,6 --- R (s) - c -U (s) --- Xóa các dòng R (s), sau đó chèn các dòng U (s) đã cập nhật vào vị trí của chúng.



Ví dụ:

4a2,4 --- bắt đầu từ 4, thêm các dòng cập nhật 2-4 (nghĩa là 2,4 có nghĩa là 2, 3 và 4)

2,4d1 --- xóa các dòng 2-4.

2,4c5,6 --- xóa các dòng 2-4 và chèn các dòng cập nhật 5-6


  • Tôi biết rằng đây là các lệnh biên tập luồng và được thiết kế để xử lý bằng máy. Ví dụ, nó thực sự là lệnh ed , không phải chèn, nhưng nó hữu ích hơn cho tôi khi nghĩ về chèn, đó là những gì cuối cùng đang được thực hiện cho tệp. Họ sử dụng các hoạt động truyền phát, nhưng tôi thích nghĩ về kết quả.

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.