Khác biệt -b và -w


20

Từ difftrang hướng dẫn:

-b, --ignore-space-change
      ignore changes in the amount of white space

-w, --ignore-all-space
      ignore all white space

Từ điều này, tôi suy luận rằng sự khác biệt giữa -b-wcác tùy chọn phải -bnhạy cảm với loại khoảng trắng (tab so với khoảng trắng). Tuy nhiên, đó dường như không phải là trường hợp:

$ diff 1.txt 2.txt 
1,3c1,3
<     Four spaces, changed to one tab
<         Eight Spaces, changed to two tabs
<     Four spaces, changed to two spaces
---
>       Four spaces, changed to one tab
>               Eight Spaces, changed to two tabs
>   Four spaces, changed to two spaces
$ diff -b 1.txt 2.txt 
$ diff -w 1.txt 2.txt 
$

Vì vậy, sự khác biệt giữa -b-wcác tùy chọn là gì? Đã thử nghiệm với diffutils 3.2 trên Kubfox Linux 13.04.

Câu trả lời:


18

Trang người đàn ông không rõ ràng về điểm đó, nhưng trang thông tin chi tiết:

1.2 Loại bỏ sự khác biệt về khoảng cách giữa các ô trống và tab

Các --ignore-tab-expansion( -E) tùy chọn bỏ qua sự khác biệt giữa các tab và không gian trên đầu vào. Một tab được coi là tương đương với số lượng khoảng trắng cho điểm dừng tab tiếp theo (* lưu ý Tab: :).

Các --ignore-trailing-space( -Z) tùy chọn bỏ qua khoảng trắng ở cuối dòng.

Các --ignore-space-change( -b) lựa chọn là mạnh hơn -E-Zkết hợp. Nó bỏ qua khoảng trắng ở cuối dòng và coi tất cả các chuỗi khác của một hoặc nhiều ký tự khoảng trắng trong một dòng là tương đương. Với tùy chọn này, diffcoi hai dòng sau là tương đương, trong đó $biểu thị kết thúc dòng:

 Here lyeth  muche rychnesse  in lytell space.   -- John Heywood$
 Here lyeth muche rychnesse in lytell space. -- John Heywood   $

Các --ignore-all-space( -w) tùy chọn mạnh vẫn. Nó bỏ qua sự khác biệt ngay cả khi một dòng có khoảng trắng trong đó dòng kia không có. Các ký tự "khoảng trắng" bao gồm tab, tab dọc, nguồn cấp mẫu, trả về vận chuyển và khoảng trắng; một số địa phương có thể định nghĩa các ký tự bổ sung là khoảng trắng. Với tùy chọn này, diff coi hai dòng sau là tương đương nhau, trong đó $biểu thị kết thúc dòng và ^Mbiểu thị lợi nhuận vận chuyển:

 Here lyeth  muche  rychnesse in lytell space.--  John Heywood$
   He relyeth much erychnes  seinly tells pace.  --John Heywood   ^M$

Đối với nhiều chương trình khác, dòng mới cũng là một ký tự khoảng trắng, nhưng difflà một chương trình định hướng dòng và một ký tự dòng mới luôn kết thúc một dòng. Do đó -w, --ignore-all-spacetùy chọn hoặc không bỏ qua các thay đổi liên quan đến dòng mới; nó bỏ qua chỉ những thay đổi không gian trắng khác.


6

Có vẻ như đó là khoảng cách giữa các từ có thể nhiều hơn nhưng đây là kết quả của tôi:

diff 1.txt 2.txt 
1,2c1,2
< test
< next next
---
> te  st     
> next  next


diff -b 1.txt 2.txt 
1c1
< test
---
> te  st 

kết quả từ -w là không có gì.

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.