Trong một trong những hướng dẫn trước đây của chúng tôi, chúng tôi đã thảo luận về một tiện ích dòng lệnh Linux - được gọi là diff - cho phép bạn so sánh hai tệp theo từng dòng. Nhưng nếu yêu cầu là so sánh không phải hai, mà là ba tệp thì sao? Vâng, cũng có một tiện ích dòng lệnh Linux cho mục đích này và nó được gọi một cách thích hợp là diff3.
Nếu bạn đang tìm kiếm một công cụ như vậy, thì không cần tìm đâu xa nữa. Trong hướng dẫn này, chúng tôi sẽ giải thích cách sử dụng diff3 thông qua các ví dụ dễ hiểu.
Đây là tệp1:
Đây là file2:
Và đâylà file3:
Rõ ràng, nếu chúng ta xem nội dung của ba tệp này, thì sự thay đổi duy nhất nằm ở dòng đầu tiên của tệp đầu tiên. Bây giờ chúng ta hãy xem diff3 báo cáo thay đổi này như thế nào.
Sau đây là cách chúng ta có thể sử dụng diff3 trong trường hợp này:
Và đây là kết quả đầu ra mà nó tạo ra:
Bạn có thể hiểu kết quả đầu ra theo cách sau:
Đây là tệp 1:
Đây là file2:
Và đâylà file3:
Lệnh vẫn là tương tự:
Và đây là đầu ra:
Vì vậy, đầu ra, trong trường hợp này, có thể được hiểu là:
Trong khi file1 và file2 vẫn giữ nguyên, đây là file3:
Như nội dung của nó, file3 hiện chứa một dòng thừa ở cuối.
Chúng ta hãy chạy cùng một lệnh diff3:
Và đây là đầu ra lệnh tạo ra:
Đầu ra bắt đầu bằng cách nói rằng thay đổi nằm trong file3. Thay đổi nằm ở dòng thứ tư của file3 (3:4c), là một dòng hoàn toàn mới khi so sánh với file1 và file2.
Những gì chúng ta đã thảo luận cho đến nay là một số trường hợp đơn giản. Hãy lấy một vài tình huống hơi phức tạp. Ví dụ, hãy coi file1, file2 và file3 chứa sau đây:
Vì vậy, bây giờ cả file1 và file2 đều chứa các thay đổi và chúng cũng nằm trên các dòng khác nhau. Hãy cùng xem diff3 tạo ra kết quả gì trong trường hợp này:
Như bạn có thể thấy trong kết quả đầu ra hiển thị ở trên, dòng đầu tiên không chứa bất kỳ số nào. Đó là vì không phải một mà là nhiều tệp hiện chứa các thay đổi. Đối với diff3, dòng 2 và 3 của cả ba tệp hiện đều khác nhau. Đó là lý do tại sao thay vì một số duy nhất sau dấu hai chấm
), kết quả đầu ra hiện chứa một phạm vi - '2,3', nghĩa là từ dòng 2 đến dòng 3.
Hãy lấy thêm một ví dụ nữa. Giả sử lần này ba tệp chứa thông tin sau:
Bây giờ khi lệnh diff được chạy, nó tạo ra kết quả sau:
Ở đây, nếu bạn cố gắng hiểu, lệnh diff3 cho biết rằng các thay đổi nằm sau dòng 3 trong cả ba tệp. Trong khi file1 chứa dòng "This is line4" làm dòng thứ tư, file3 chứa "This is line4" và "This is line5" làm dòng thứ tư và thứ năm. Mặt khác, file2 chỉ có 3 dòng.
Vậy là xong phần cơ bản về diff3. Để biết thêm thông tin, đây là những gì tài liệu chính thức nói về công cụ này: "Bạn có thể sử dụng lệnh
Nếu bạn đang tìm kiếm một công cụ như vậy, thì không cần tìm đâu xa nữa. Trong hướng dẫn này, chúng tôi sẽ giải thích cách sử dụng diff3 thông qua các ví dụ dễ hiểu.
Cài đặt diff3
Công cụ diff3 có thể sẽ được cài đặt theo mặc định trên hệ thống của bạn - ít nhất là trên Ubuntu. Nhưng nếu không phải vậy, thì đừng lo lắng vì bạn có thể dễ dàng thực hiện bằng cách cài đặt gói GNU Diffutils. Để biết hướng dẫn về cách tải xuống và cài đặt gói trên hệ thống của bạn, hãy truy cập tại đây.Sử dụng Diff3
Vì tiện ích diff3 so sánh ba tệp, nên đối với các ví dụ sử dụng của chúng tôi, chúng tôi sẽ phải lấy ba tệp mà chúng tôi sẽ truyền làm đầu vào cho công cụ.Đây là tệp1:
Mã:
This is line1 with some change
This is line2
This is line3
Mã:
This is line1
This is line2
This is line3
Mã:
This is line1
This is line2
This is line3
Sau đây là cách chúng ta có thể sử dụng diff3 trong trường hợp này:
Mã:
diff3 file1 file2 file3
Mã:
====1
1:1c
This is line1 with some change
2:1c
3:1c
This is line1
- Dòng đầu tiên bắt đầu bằng bốn dấu '=' và kết thúc bằng số '1' cho biết sự thay đổi nằm ở tệp đầu tiên.
- Ở dòng tiếp theo, '1' đầu tiên có nghĩa là tệp1; '1c' sau dấu hai chấm 'có nghĩa là dòng đầu tiên chứa'. Dòng thực tế được hiển thị ở dòng tiếp theo của đầu ra.
- Tương tự, 2:1c và 3:1c có nghĩa là 'dòng đầu tiên của tệp2 và tệp3 chứa'. Và vì nội dung của dòng giống nhau trong cả hai tệp, nên dòng thực tế chỉ được hiển thị một lần, ở cuối đầu ra.
Đây là tệp 1:
Mã:
This is line1
This is line2
This is line3
Mã:
This is line1
This is line2
This is line3
Mã:
This is line1 with some change
This is line2
This is line3
Mã:
diff3 file1 file2 file3
Mã:
====3
1:1c
2:1c
This is line1
3:1c
This is line1 with some change
- Sự thay đổi nằm ở file3
- Cả file1 và file2 đều chứa "Đây là dòng1" làm dòng đầu tiên của chúng
- Trong khi file3 chứa "Đây là dòng1 với một số "thay đổi" là dòng đầu tiên của nó.
Trong khi file1 và file2 vẫn giữ nguyên, đây là file3:
Mã:
This is line1
This is line2
This is line3
This is line4
Chúng ta hãy chạy cùng một lệnh diff3:
Mã:
diff3 file1 file2 file3
Mã:
====3
1:3a
2:3a
3:4c
This is line4
Những gì chúng ta đã thảo luận cho đến nay là một số trường hợp đơn giản. Hãy lấy một vài tình huống hơi phức tạp. Ví dụ, hãy coi file1, file2 và file3 chứa sau đây:
Mã:
This is line1
This is line2 with some change
This is line3
Mã:
This is line1
This is line2
This is line3 with some change
Mã:
====
1:2,3c
This is line2 with some change
This is line3
2:2,3c
This is line2
This is line3
3:2,3c
This is line2
This is line3 with some change
Hãy lấy thêm một ví dụ nữa. Giả sử lần này ba tệp chứa thông tin sau:
Mã:
This is line1
This is line2
This is line3
This is line4
Mã:
This is line1
This is line2
This is line3
This is line4
This is line5
Mã:
====
1:4c
This is line4
2:3a
3:4,5c
This is line4
This is line5
Vậy là xong phần cơ bản về diff3. Để biết thêm thông tin, đây là những gì tài liệu chính thức nói về công cụ này: "Bạn có thể sử dụng lệnh
diff3
để hiển thị sự khác biệt giữa ba tệp. Khi hai người thực hiện các thay đổi độc lập đối với một bản gốc chung, diff3
có thể báo cáo sự khác biệt giữa bản gốc và hai phiên bản đã thay đổi và có thể tạo ra một tệp được hợp nhất chứa cả hai thay đổi của người dùng cùng với các cảnh báo về xung đột.".