Różnica -b i -w różnica


20

Z strony diffpodręcznika:

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

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

Z tego wnoszę, że różnica między -bi -wopcji należy stwierdzić, że -bjest wrażliwy na rodzaj białych znaków (tabs porównaniu ze spacjami). Wydaje się jednak, że tak nie jest:

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

Jaka jest różnica między opcjami -bi -w? Testowane z diffutils 3.2 na Kubuntu Linux 13.04.

Odpowiedzi:


18

Strona podręcznika nie jest w tym miejscu bardzo jasna, ale strona informacyjna wyjaśnia:

1.2 Tłumienie różnic w odstępach pustych i tabulatorach

Opcja --ignore-tab-expansion( -E) ignoruje rozróżnienie między tabulatorami a spacjami na wejściu. Tab uważa się za równoważny liczbie spacji do następnego tabulatora (* uwaga Tabs: :).

Opcja --ignore-trailing-space( -Z) ignoruje białe znaki na końcu linii.

Opcja --ignore-space-change( -b) jest silniejsza niż -Ei -Złączona. Ignoruje białe znaki na końcu linii i uznaje wszystkie pozostałe sekwencje jednego lub więcej białych znaków w linii za równoważne. W przypadku tej opcji diffuważa następujące dwie linie za równoważne, gdzie $oznacza koniec linii:

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

Opcja --ignore-all-space( -w) jest jeszcze silniejsza. Ignoruje różnice, nawet jeśli jedna linia ma białą spację, a druga nie ma żadnej. Znaki „białych znaków” obejmują tabulator, tabulator pionowy, wysuw formularza, znak powrotu karetki i spację; niektóre ustawienia narodowe mogą definiować dodatkowe znaki jako białe znaki. W przypadku tej opcji diff uważa następujące dwie linie za równoważne, gdzie $oznacza koniec linii i ^Mznak powrotu karetki:

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

W wielu innych programach nowa linia jest również znakiem spacji, ale diffjest programem zorientowanym na linię, a znak nowej linii zawsze kończy linię. Dlatego opcja -wlub --ignore-all-spacenie ignoruje zmian związanych z nową linią; ignoruje tylko inne zmiany białych znaków.


6

Wygląda na to, że odstępy między słowami mogą być większe, ale to mój wynik:

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 

wyniki z -w to nic.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.