Giả sử nếu bạn muốn so sánh sự khác giữa 2 phiên bản của một file text (file văn bản) nhưng chưa biết cách thực hiện, trong bài viết dưới đây Taimienphi.vn sẽ hướng dẫn bạn cách so sánh 2 file text trên Linux Terminal.
Để so sánh 2 phiên bản của một file, tất cả những gì bạn cần là sử dụng lệnh diff. Tham khảo tiếp bài viết dưới đây của Taimienphi.vn để tìm hiểu cách so sánh 2 file text trên Linux Terminal thông qua lệnh diff như thế nào nhé.
So sánh 2 file text trên Linux Terminal
1. Sử dụng lệnh diff
Lệnh diff so sánh 2 file và tạo danh sách liệt kê các điểm khác biệt giữa 2 file. Nói chính xác hơn lệnh này tạo danh sách các thay đổi cần được thực hiện cho file đầu tiên để khớp với file thứ hai.
Lệnh diff được thiết kế để tìm ra sự khác biệt giữa các file mã nguồn và để tạo đầu ra có thể đọc được và được thực thi bởi các chương trình khác, chẳng hạn như lệnh patch.
Tham khảo tiếp nội dung dưới đây để tìm hiểu cách sử dụng lệnh diff để so sánh 2 file text nhé.
Đầu tiên chúng ta sẽ phân tích file text thứ 2. Thứ tự các file trên dòng lệnh xác định file diff nào là file đầu tiên và file nào là file thứ 2.
Trong ví dụ dưới đây, alpha1 là file đầu tiên và alpha2 là file thứ hai. Cả 2 file này đều chứa bảng chữ cái ngữ âm, nhưng file thứ 2 (tức alpha2) được bổ sung thêm một số chỉnh sửa để không trùng với file thứ nhất.
Để so sánh 2 file text này, chúng ta sử dụng lệnh diff. Nhập diff + khoảng cách + tên file đầu tiên + khoảng cách + tên file thứ 2 rồi nhấn Enter:
diff alpha1 alpha2
Bước tiếp theo chúng ta sẽ tiến hành mở xẻ đầu ra. Các sự khác biệt giữa 2 file sẽ được liệt kê lần lượt trong các cột và được đánh dấu nhãn. Nhãn chứa các số và chữ cái nằm giữa, chẳng hạn như 4c4. Số đầu tiên là dòng đầu tiên trong alpha1, số thứ 2 là dòng thứ 2 trong alpha2. Các chữ cái ở giữa có ý nghĩa:
c: dòng trong file đầu tiên cần được thay đổi để khớp với dòng trong file thứ 2.
d: dòng trong file đầu tiên phải được xóa đi để khớp với file thứ 2.
a: nội dung bổ sung phải được thêm vào file đầu tiên để khớp với file thứ 2.
Trong ví dụ trên, 4c4 có ý nghĩa là dòng thứ 4 trong file đầu tiên (tức alpha1) phải được thay đổi để khớp với dòng thứ 4 trong file thứ 2, (tức file alpha2). Đây là sự khác biệt đầu tiên mà lệnh diff tìm thấy giữa 2 file.
Các dòng bắt đầu bằng < refer="" to="" the="" first=""> (tham chiếu đến file đầu tiên), trong ví dụ là alpha1 và bắt đầu bằng > refer to the second file, alpha2. Dòng < delta="">cho chúng ta biết được Delta là nội dung của dòng thứ 4 trong alpha1. Dòng >Dave cho chúng ta biết được Dave là nội dung của dòng thứ 4 trong alpha2. Tức là chúng ta sẽ phải thay thế Delta bằng Dave trong dòng thứ 4 trong file alpha1 để các dòng này khớp với cả 2 file.
Thay đổi tiếp theo được chỉ định là 12c12. Áp dụng logic tương tự, 12c12 tức là dòng 12 trong alpha1 chứa từ Lima, nhưng dòng 12 trong alpha2 chứa từ Linux.
Thay đổi thứ 3 đề cập đến một dòng đã bị xóa khỏi alpha2. Nhãn 21d20 được giải mã, hiểu là "dòng 21 trong file đầu tiên phải được xóa để cả 2 file đồng bộ hóa từ dòng 20 trở đi". Dòng < uniform="">hiển thị cho chúng ta nội dung của dòng phải được xóa trong alpha1.
Sự khác biệt thứ 4 được đánh dấu là 26a26,28. Thay đổi này đề cập đến 3 dòng được bổ sung thêm vào alpha2. Lưu ý số 26,28 trong nhãn. Số của 2 dòng được phân tách bằng dấu phẩy thể hiện phạm vi số dòng.
Trong ví dụ này, phạm vi bắt đầu từ dòng 26 đến dóng 28. Nhã được hiểu là "dòng 26 trong file đầu tiên, thêm dòng 26 đến 28 trong file thứ 2". Lệnh sẽ hiển thị 3 dòng trong alpha2 cần phải thêm vào alpha1, chứa các từ Quirk, Strange và Charm.
2. So sánh 2 file text có giống nhau không
Nếu chỉ muốn so sánh xem 2 file text liệu có giống nhau hay không, chúng ta sử dụng thêm tùy chọn -s (báo cáo các file giống hệt nhau).
diff -s alpha1 alpha3
Ngoài ra chúng ta cũng có thể sử dụng tùy chọn -q (tóm tắt) để lấy mô tả ngắn gọn sự khác nhau giữa 2 file.
diff -q alpha1 alpha2
Một điều cần lưu ý là nếu 2 file là giống hệt nhau, tùy chọn -q (tóm tắt) sẽ không trả về bất kỳ báo cáo nào cả.
3. So sánh 2 file text có khác nhau không
Tùy chọn -y sử dụng các bố cạnh khác nhau để mô tả sự khác biệt giữa 2 file. Sử dụng tùy chọn -W để giới hạn số lượng cột được hiển thị để việc đọc kết quả đầu ra dễ dàng hơn.
Chẳng hạn sử dụng lệnh diff dưới đây để tạo kết quả hiển thị hai bên và giới hạn trong 70 cột:
diff -y -W 70 alpha1 alpha2
File đầu tiên trong dòng lệnh, alpha1 được hiển thị bên trái và dòng thứ 2 trên dòng lệnh, alpha2 được hiển thị ở bên phải. Các dòng của mỗi file được hiển thị cạnh nhau. Các ký tự chỉ báo cùng các dòng này trong alpha2 biểu thị thay đổi, xóa hoặc thêm nội dung.
|: một dòng đã được thay đổi trong file thứ 2.
<> một dòng đã bị xóa khỏi file thứ 2.
>: một dòng được thêm vào file thứ 2 mà không được thêm vào file đầu tiên.
Nếu thích tóm tắt các thay đổi, sự khác biệt giữa 2 file, chúng ta có thể sử dụng tùy chọn --suppress-common-lines. Tùy chọn này buộc lệnh diff liệt kê các dòng đã thay đổi, thêm hoặc xóa nội dung.
diff -y -W 70 --suppress-common-lines alpha1 alpha2
4. Thêm màu sắc cho lệnh
Tiện ích có tên gọi colordiff, được sử dụng để thêm màu sắc cho đầu ra lệnh diff, giúp cho việc tìm ra dòng nào có sự khác biệt dễ dàng hơn.
Nếu đang sử dụng Ubuntu hoặc các bản phân phối dựa trên Debian khác, sử dụng apt-get để cài đặt gói này trên hệ thống. Trên các bản phân phối Linux khác, chính ta sử dụng chương trình quản lý các gói thư viện (package management) để cài đặt tiện ích.
sudo apt-get install colordiff
Sử dụng colordiff tương tự như cách mà chúng ta sử dụng diff.
Thực tế, colordiff là trình bao bọc cho diff, và diff thực hiện tất cả các công việc phía sau hậu trường. Vì vậy tất cả các tùy chọn diff đều hoạt động với colordiff.
5. Cung cấp một số ngữ cảnh
Để tìm một số thay đổi giữa 2 file, thay vì liệt kê và hiển thị tất cả các thay đổi, chúng ta có thể yêu cầu diff cung cấp một số ngữ cảnh.
Để làm được điều này, chúng ta có 2 tùy chọn. Các tùy chọn này được sử dụng để hiển thị một số dòng trước và sau mỗi dòng có sự thay đổi, và chúng ta có thể dễ dàng tìm ra sự khác biệt cụ thể giữa 2 file.
Cách đầu tiên là sử dụng tùy chọn -c (sao chép ngữ cảnh):
colordiff -c alpha1 alpha2
Đầu ra diff này có một tiêu đề. Tiêu đề liệt kê 2 tên file và số lần chỉnh sửa các file. Dấu hoa thị (*) trước tên của file đầu tiên và dấu gạch ngang (-) trước tên của file thứ 2. Dấu hoa thị và dấu gạch ngang được sử dụng để chỉ ra đầu ra của file.
Dòng có dấu hoa thị và số 1,7 ở giữa cho biết những thay đổi từ dòng 1 đến 7 trong file đầu tiên (alpha1). Chữ Delta được gắn cờ đánh dấu thay đổi, ngoài ra nó còn có dấu chấm than (!) bên cạnh và được đánh dấu màu đỏ. Có 3 dòng text không thay đổi được hiển thị trước và sau dòng đó để chúng ta có thể dễ dàng nhìn thấy ngữ cảnh của dòng đó trong file.
Dòng có dấu gạch ngang kèm theo 1,7 ở giữa cho biết chúng ta đang xem các dòng từ 1 đến 7 trong file alpha2. Chữ Dave trên dòng thứ 4 được đánh dấu là thay đổi.
3 dòng ngữ cảnh trên và dưới mỗi một thay đổi là giá trị mặc định. Nếu muốn, bạn có thể chỉ định số dòng này. Để làm được điều này, sử dụng tùy chọn -C (sao chép ngữ cảnh) cộng thêm số dòng:
colordiff -C 2 alpha1 alpha2
Tùy chọn diff thứ 2 để cung cấp ngữ cảnh là -u (ngữ cảnh thống nhất):
colordiff -u alpha1 alpha2
Như đã đề cập ở trên, đầu ra có chứa tiêu đề, hiển thị tên 2 file và số lần chỉnh sửa các file. Có dấu gạch ngang (-) trước tên alpha1 và dấu cộng (+) trước tên alpha2.
Điều này để cho chúng ta biết dấu gạch ngang được sử dụng để chỉ alpha1 và dấu cộng để chỉ alpha2. Ngoài ra còn có các dòng bắt đầu bằng ký hiệu (@). Các dòng này đánh dấu sự khác biệt giữa 2 file.
3 dòng trước và sau dòng được đánh dấu khác nhau, cho biết ngữ cảnh của dòng thay đổi. Dòng từ file alpha1 được bắt đầu bằng dấu gạch ngang (-), dòng từ file alpha2 bắt đầu bằng dấu cộng (+). Với tùy chọn này, chúng ta chỉ mất 8 dòng để liệt kê sự khác biệt trong khi tùy chọn trên cần đến 15 dòng.
Như bạn mong đợi, chúng tôi có thể yêu cầu diff cung cấp chính xác số lượng dòng bối cảnh hợp 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 thống nhất) với vốn hoa U U và cung cấp số lượng dòng bạn muốn:
Nếu muốn, bạn có thể sử dụng tùy chọn -U (chữ U viết hoa) để cung cấp số dòng ngữ cảnh mong muốn.
colordiff -U 2 alpha1 alpha2
6. Bỏ qua khoảng trắng, chữ viết hoa viết thường
Thử so sánh 2 file là test4 và test5. Các file này có chứa tên của 6 siêu anh hùng.
colordiff -y -W 70 test4 test5
Kết quả trả về cho thấy diff không tìm thấy sự khác biệt nào ở các dòng Black Widow, Spider-Man và Thor. Lệnh đánh dấu các thay đổi ở các dòng Captain America, Ironman và The Hulk.
Trong test5, Hulk được viết bằng chữ "h" thường và Captain America có thêm khoảng trống ở giữa "Captain" và "America". Sự khác biệt ở dòng Ironman ở đây là khoảng trắng.
Để bỏ qua sự khác biệt cụ thể giữa 2 file, chúng ta có thể sử dụng:
-i: bỏ qua sự khác biệt giữa viết hoa và viết thường.
-Z: bỏ qua dấu cách, khoảng trắng.
-b: bỏ qua các thay đổi về số lượng các khoảng trắng.
-w: bỏ qua các thay đổi khoảng trắng.
Tiếp theo yêu cầu diff kiểm tra lại 2 file này một lần nữa, nhưng bỏ qua sự khác biệt giữa viết hoa và viết thường:
colordiff -i -y -W 70 test4 test5
Các dòng The Hulk và the hulk được xem là giống nhau và không được đánh dấu chữ thường h. Tiếp theo, sử dụng lệnh dưới đây để bỏ qua khoảng trắng:
colordiff -i -Z -y -W 70 test4 test5
Sử dụng lệnh dưới đây để yêu cầu diff bỏ qua sự khác biệt giữa viết hoa và viết thường và tất cả các khoảng trắng:
colordiff -i -w -y -W 70 test4 test5
Bằng cách nói với diff bỏ qua các sự khác biệt mà chúng ta không cần phải quan tâm đến để khớp các file với nhau.
Ngoài ra lệnh diff còn có nhiều tùy chọn khác, tuy nhiên phần lớn các tùy chọn này liên quan đến việc tạo đầu ra mà máy có thể đọc được.
Bài viết trên đây Taimienphi.vn vừa hướng dẫn bạn cách so sánh 2 file text, file văn bản trên Linux Terminal. Ngoài ra nếu có bất kỳ thắc mắc hoặc câu hỏi nào cần giải đáp, bạn đọc có thể để lại ý kiến của mình trong phần bình luận bên dưới bài viết nhé.
https://thuthuat.taimienphi.vn/so-sanh-2-file-text-file-van-ban-tren-linux-terminal-46059n.aspx
Bạn có thể tìm hiểu về cách tạo file text bằng Terminal trên Linux được hướng dẫn cụ thể trên Taimienphi, tạo file text bằng Terminal trên Linux cũng khá đơn giản, bạn có thể làm theo nhanh chóng.