Tin tức và phân tích của tất cả các thiết bị di động

Cách so sánh hai tệp văn bản trong thiết bị đầu cuối linux

Bạn muốn xem sự khác biệt giữa hai phiên bản của tệp văn bản? Sau đó, diff là lệnh bạn cần. Hướng dẫn này chỉ cho bạn cách dễ dàng sử dụng khác biệt trên Linux và macOS.

Lặn trong sự khác biệt

Lệnh diff so sánh hai tệp và liệt kê sự khác biệt giữa chúng. Nói chính xác hơn, nó tạo ra một danh sách các thay đổi cần thực hiện đối với tệp đầu tiên để khớp với tệp thứ hai. Nếu bạn tính đến điều này, bạn sẽ dễ dàng hiểu được đầu ra của diff hơn. Lệnh diff được thiết kế để tìm sự khác biệt giữa các tệp mã nguồn và tạo ra kết quả mà các chương trình khác có thể đọc và sử dụng, chẳng hạn như lệnh vá. Trong hướng dẫn này, chúng ta sẽ xem xét những cách hữu ích, thân thiện với con người nhất để sử dụng khác biệt.

Hãy đi sâu vào và phân tích hai tệp. Thứ tự của các tệp trên dòng lệnh xác định khác biệt nào coi là “tệp đầu tiên” và khác biệt nào coi là “tệp thứ hai”. Trong ví dụ bên dưới, alpha1 là tệp đầu tiên và alpha2 là tệp thứ hai. Cả hai tệp đều chứa phần mở rộng bảng chữ cái phiên âm, nhưng tệp thứ hai, alpha2, đã được chỉnh sửa thêm, vì vậy hai tệp này không giống nhau.

Chúng ta có thể so sánh các tệp với lệnh này. Nhập diff, dấu cách, tên của tệp đầu tiên, dấu cách, tên của tệp thứ hai, rồi nhấn Enter.

diff alpha1 alpha2

Chúng ta sẽ phân tích kết quả này như thế nào? Một khi bạn biết những gì để tìm kiếm, nó không quá tệ. Mỗi sự khác biệt được liệt kê tuần tự trong một cột và mỗi sự khác biệt được dán nhãn. Nhãn có số ở cả hai mặt của chữ cái, ví dụ: 4c4. Số đầu tiên là số dòng trong alpha1 và số thứ hai là số dòng trong alpha2. Chữ cái ở giữa có thể là:

c: Một dòng trong tệp đầu tiên cần được thay đổi để khớp với một dòng trong tệp thứ hai.
d: Dòng trong tệp đầu tiên cần được xóa để khớp với tệp thứ hai.
a: Nội dung bổ sung cần thêm vào tệp đầu tiên để khớp với tệp thứ hai.

4c4 trong ví dụ của chúng tôi cho chúng tôi biết rằng dòng thứ tư alpha1 cần được thay đổi để khớp với dòng thứ tư alpha2. Đây là sự khác biệt đầu tiên giữa hai tệp được tìm thấy.

Các dòng bắt đầu bằng đề cập đến tệp thứ hai, alpha2. Dòng Dave cho chúng ta biết rằng từ Dave là nội dung của dòng bốn trong alpha2. Tóm lại, chúng ta cần thay thế Delta bằng Dave trên dòng bốn trong alpha1 để làm cho dòng đó khớp trong cả hai tệp.

Thay đổi tiếp theo được chỉ định bởi 12c12. Sử dụng logic tương tự, chúng tôi phát hiện ra rằng dòng 12 của alpha1 chứa từ Lima, nhưng dòng 12 của alpha2 chứa từ Linux.

Thay đổi thứ ba liên quan đến dòng đã bị xóa khỏi alpha2. Nhãn 21d20 được giải mã vì “phải xóa dòng 21 khỏi tệp đầu tiên để cả hai tệp được đồng bộ hóa từ dòng 20.” Tập tin

Sự khác biệt thứ tư được dán nhãn 26a26,28. Thay đổi này liên quan đến ba dòng bổ sung đã được thêm vào alpha2. Lưu ý 26,28 trên nhãn. Các số hai dòng được phân tách bằng dấu phẩy biểu thị một dãy số dòng. Trong ví dụ này, phạm vi là dòng 26 đến dòng 28. Nhãn được hiểu là “trên dòng 26 của tệp đầu tiên, thêm dòng 26 đến 28 của tệp thứ hai.” Chúng tôi được hiển thị ba dòng từ alpha2 cần được thêm vào alpha1. Chúng chứa các từ Quirk, Strange và Charm.

Snappy một lót

Nếu bạn chỉ muốn biết liệu hai tệp có giống nhau hay không, hãy sử dụng tùy chọn -s (báo cáo các tệp giống hệt nhau).

diff -s alpha1 alpha3

Đầu ra của lệnh diff với tùy chọn -s

Bạn có thể sử dụng tùy chọn -q (ngắn) để đưa ra một tuyên bố ngắn gọn như nhau về hai tệp khác nhau.

diff -q alpha1 alpha2

Đầu ra của lệnh diff với tùy chọn -q

Một điều cần lưu ý là với hai tệp giống hệt nhau, tùy chọn -q (ngắn) sẽ đóng hoàn toàn và không báo cáo gì.

Chế độ xem thay thế

Tùy chọn -y (cạnh nhau) sử dụng bố cục khác để mô tả sự khác biệt giữa các tệp. Thường thuận tiện khi sử dụng tùy chọn -W (chiều rộng) trong chế độ xem cạnh nhau để giới hạn số lượng cột được hiển thị. Điều này tránh được các dòng kết thúc xấu xí làm cho kết quả khó đọc. Ở đây, chúng tôi đã yêu cầu diff tạo màn hình cạnh nhau và giới hạn đầu ra ở 70 cột.

diff -y -W 70 alpha1 alpha2

Đầu ra lệnh tìm khác biệt song song

Tệp đầu tiên trên dòng lệnh, alpha1, được hiển thị ở bên trái và dòng thứ hai trên dòng lệnh, alpha2, được hiển thị ở bên phải. Các dòng từ mỗi tệp được hiển thị cạnh nhau. Bên cạnh những dòng này trong alpha2 là các ký tự chỉ báo đã được thay đổi, loại bỏ hoặc thêm vào.

|: Dòng đã được thay đổi trong tệp thứ hai.
: Một dòng đã được thêm vào tệp thứ hai không có trong tệp đầu tiên.

Nếu bạn thích một danh sách ngắn gọn hơn về sự khác biệt của tệp, hãy sử dụng tùy chọn –suppress-common-lines. Điều này buộc diff chỉ hiển thị các dòng đã thay đổi, thêm hoặc xóa.

diff -y -W 70 --suppress-common-lines alpha1 alpha2

Đầu ra của lệnh khác với tùy chọn --suppress-common-lines

Thêm một số màu sắc

Một công cụ khác được gọi là colordiff thêm tô sáng màu vào đầu ra khác biệt. Điều này làm cho nó dễ dàng hơn nhiều để xem dòng nào có sự khác biệt.

Sử dụng apt-get để cài đặt gói này trên hệ thống của bạn nếu bạn đang sử dụng Ubuntu hoặc bản phân phối dựa trên Debian khác. Trên các bản phân phối Linux khác, thay vào đó hãy sử dụng công cụ quản lý gói của bản phân phối Linux.

sudo apt-get install colordiff

Sử dụng colordiff giống như bạn sẽ sử dụng diff.

Đầu ra lệnh Colordiff không có tùy chọn

Colordiff thực sự là một trình bao bọc cho diff và diff thực hiện tất cả các công việc đằng sau hậu trường. Vì lý do này, tất cả các tùy chọn khác sẽ hoạt động với colordiff.

Đầu ra của lệnh colordiff với tùy chọn --suppress-common-lines

Cung cấp bối cảnh

Để tìm điểm trung gian giữa việc hiển thị tất cả các dòng trong tệp trên màn hình và chỉ hiển thị các dòng đã thay đổi, chúng ta có thể yêu cầu tìm khác biệt về ngữ cảnh. Điều này có thể được thực hiện theo hai cách. Cả hai cách đều có mục đích giống nhau, đó là hiển thị một số dòng trước và sau mỗi dòng được thay đổi. Bạn sẽ có thể xem điều gì đang xảy ra trong tệp mà sự khác biệt được phát hiện.

Phương thức đầu tiên sử dụng tùy chọn -c (bối cảnh đã sao chép).

colordiff -c alpha1 alpha2

Đầu ra Colordiff với tùy chọn -c

Đầu ra khác có một tiêu đề. Tiêu đề chứa hai tên tệp và thời gian sửa đổi của chúng. có những ngôi sao

trước tên tệp thứ nhất và dấu gạch ngang (-) trước tên tệp thứ hai. Dấu hoa thị và dấu gạch ngang sẽ được sử dụng để cho biết các dòng trong đầu ra thuộc về tệp nào.

Đường sao với 1,7 ở giữa có nghĩa là chúng tôi đang xem các dòng có alpha1. Cụ thể hơn, chúng tôi đang xem xét các dòng từ một đến bảy. Từ Delta được đánh dấu là đã thay đổi. Có một dấu chấm than (!) bên cạnh và nó có màu đỏ. Có ba dòng văn bản chưa sửa đổi được hiển thị trước và sau dòng này để chúng ta có thể thấy ngữ cảnh của dòng này trong tệp.

đường gạch ngang với 1,7 ở giữa cho chúng tôi biết rằng chúng tôi hiện đang xem các dòng có alpha2. Một lần nữa, chúng tôi nhìn vào các hàng từ một đến bảy, với từ Dave ở hàng bốn được đánh dấu là khác.

colordiff -C 2 alpha1 alpha2

Ba dòng ngữ cảnh bên trên và bên dưới mỗi thay đổi là mặc định.  Bạn có thể chỉ định số dòng ngữ cảnh bạn muốn cung cấp.  Để thực hiện việc này, hãy sử dụng tùy chọn -C (ngữ cảnh đã sao chép) với chữ

Đầu ra Colordiff với tùy chọn -C 2

colordiff -u alpha1 alpha2

Tùy chọn khác biệt thứ hai cung cấp ngữ cảnh là tùy chọn -u (bối cảnh hợp nhất).

Đầu ra Colordiff với tùy chọn -u

Như trước đây, chúng tôi có một tiêu đề trong đầu ra. Hai tệp này được đặt tên và thời gian sửa đổi của chúng được hiển thị. Có dấu gạch ngang (-) trước alpha1 và dấu cộng (+) trước alpha2. Điều này cho chúng tôi biết rằng dấu gạch ngang sẽ được sử dụng cho alpha1 và dấu cộng sẽ được sử dụng cho alpha2. Các dòng bắt đầu bằng dấu (@) nằm rải rác trong danh sách. Những dòng này đánh dấu sự khởi đầu của mỗi sự khác biệt. Chúng cũng cho chúng tôi biết dòng nào được hiển thị từ mỗi tệp.

Ba dòng được hiển thị trước và sau dòng được đánh dấu là khác nhau, vì vậy chúng ta có thể thấy ngữ cảnh của dòng đã thay đổi. Trong chế độ xem hợp nhất, các dòng có sự khác biệt được hiển thị chồng lên nhau. Dòng từ alpha1 được bắt đầu bằng dấu gạch ngang và dòng từ alpha2 được bắt đầu bằng dấu cộng. Màn hình tám dòng này hoàn thành những gì cần mười lăm dòng để hiển thị ngữ cảnh được sao chép ở trên.

colordiff -U 2 alpha1 alpha2

Như bạn mong đợi, chúng tôi có thể yêu cầu diff chỉ định chính xác số lượng dòng ngữ cảnh thống nhất mà chúng tôi muốn xem.  Để thực hiện việc này, hãy sử dụng tùy chọn -U (bối cảnh hợp nhất) với chữ

Đầu ra Colordiff với tùy chọn -U 2

Bỏ qua khoảng trắng và viết hoa

colordiff -y -W 70 test4 test5

Hãy phân tích hai tệp tiếp theo, test4 và test5.  Chúng được đặt theo tên của sáu siêu anh hùng.

Đầu ra colordiff trong tệp test4 và test5

Kết quả cho thấy diff không tìm thấy gì khác trong các dòng Black Widow, Spider-Man và Thor. Đánh dấu những thay đổi đối với các dòng Captain America, Ironman và The Hulk.

Vì vậy, những gì đã thay đổi? Vâng, trong bài kiểm tra 5 Hulk được viết bằng chữ “h” viết thường và Captain America có thêm khoảng cách giữa “Captain” và “America”. OK, nó hiển thị, nhưng có vấn đề gì với dòng Người sắt? Không có sự khác biệt có thể nhìn thấy. Đây là một quy tắc tốt. Nếu bạn không nhìn thấy nó, câu trả lời là một khoảng trắng. Gần như chắc chắn có một hoặc hai dấu cách ngẫu nhiên hoặc ký tự tab ở cuối dòng đó.

Nếu chúng không quan trọng với bạn, bạn có thể hướng dẫn diff bỏ qua một số loại khác biệt về dòng, bao gồm:
-i: Bỏ qua sự khác biệt về chữ hoa chữ thường.
-Z: Bỏ qua khoảng trắng ở cuối.
-b: Bỏ qua các thay đổi về lượng khoảng trắng.

-w: Bỏ qua tất cả các thay đổi về khoảng cách.

colordiff -i -y -W 70 test4 test5

Hãy để diff kiểm tra lại hai tệp, nhưng lần này bỏ qua mọi khác biệt về chữ hoa chữ thường.

đầu ra từ colordiff bỏ qua trường hợp

colordiff -i -Z -y -W 70 test4 test5

Các dòng từ

Đầu ra từ colordiff bỏ qua khoảng trắng ở cuối

colordiff -i -w -y -W 70 test4 test5

Như nghi ngờ, khoảng trắng ở cuối phải là sự khác biệt trong dòng Người sắt, vì diff không còn đánh dấu sự khác biệt cho dòng đó.  Điều đó rời khỏi Captain America.  Hãy yêu cầu diff bỏ qua trường hợp và tất cả các vấn đề về khoảng trắng.

Đầu ra từ colordiff bỏ qua tất cả khoảng trắng

Bằng cách yêu cầu diff bỏ qua những khác biệt mà chúng tôi không quan tâm, diff đang cho chúng tôi biết rằng các tệp phù hợp với mục đích của chúng tôi. Lệnh diff có nhiều tùy chọn hơn, nhưng hầu hết chúng đều liên quan đến việc tạo đầu ra có thể đọc được bằng máy. Chúng có thể được xem trên trang man Linux

. Các tùy chọn mà chúng tôi đã sử dụng trong các ví dụ trên sẽ cho phép bạn theo dõi tất cả sự khác biệt giữa các phiên bản của tệp văn bản của bạn bằng cách sử dụng dòng lệnh và nhãn cầu của con người.