Perbedaan diff -b dan -w

20

Dari halaman diffmanual:

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

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

Dari sini, saya menyimpulkan bahwa perbedaan antara opsi -bdan -wharus yang -bsensitif terhadap jenis spasi putih (tab vs spasi). Namun, sepertinya tidak demikian:

$ 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 
$

Jadi, apa perbedaan antara opsi -bdan -w? Diuji dengan diffutils 3.2 di Kubuntu Linux 13.04.

dotancohen
sumber

Jawaban:

18

Halaman manual tidak terlalu jelas tentang hal itu, tetapi halaman info menguraikan:

1.2 Menekan Perbedaan dalam Spasi Kosong dan Tab

Opsi --ignore-tab-expansion( -E) mengabaikan perbedaan antara tab dan spasi pada input. Tab dianggap setara dengan jumlah spasi untuk penghentian tab berikutnya (* catatan Tab: :).

Opsi --ignore-trailing-space( -Z) mengabaikan spasi putih pada ujung garis.

Opsi --ignore-space-change( -b) lebih kuat dari -Edan -Zdikombinasikan. Ini mengabaikan ruang putih di ujung garis, dan menganggap semua urutan lain dari satu atau lebih karakter spasi putih dalam suatu garis adalah setara. Dengan opsi ini, diffanggap dua baris berikut ini sama, di mana $menunjukkan akhir baris:

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

Opsi --ignore-all-space( -w) masih lebih kuat. Ini mengabaikan perbedaan bahkan jika satu garis memiliki ruang putih di mana garis lainnya tidak memiliki. Karakter "Ruang putih" meliputi tab, tab vertikal, umpan formulir, carriage return, dan spasi; beberapa lokal mungkin mendefinisikan karakter tambahan sebagai spasi. Dengan opsi ini, diff anggap dua baris berikut ini sama, di mana $menunjukkan ujung garis dan ^Mmenunjukkan carriage return:

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

Untuk banyak program lain, baris baru juga merupakan karakter spasi, tetapi diffmerupakan program yang berorientasi garis dan karakter baris baru selalu mengakhiri garis. Oleh karena itu opsi -watau --ignore-all-spacetidak mengabaikan perubahan terkait baris baru; hanya mengabaikan perubahan ruang putih lainnya.

mpy
sumber
6

Sepertinya ini adalah jarak antar kata yang mungkin lebih banyak tetapi ini adalah hasil saya:

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 

hasil dari -w bukan apa-apa.

Carl Abrahamsson
sumber