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
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
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
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
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.
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.
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 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
Đầu ra Colordiff với tùy chọn -C 2
colordiff -u alpha1 alpha2
Đầ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
Đầ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
Đầ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
đầu ra từ colordiff bỏ qua trường hợp
colordiff -i -Z -y -W 70 test4 test5
Đầu ra từ colordiff bỏ qua khoảng trắng ở cuối
colordiff -i -w -y -W 70 test4 test5
Đầ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.