Diff -b und -w Differenz

20

Aus der diffManpage:

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

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

Daraus schließe ich, dass der Unterschied zwischen den -bund -w-Optionen -babhängig von der Art des Leerzeichens sein muss (Tabulatoren vs. Leerzeichen). Dies scheint jedoch nicht der Fall zu sein:

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

Was ist der Unterschied zwischen -bund -w? Getestet mit diffutils 3.2 unter Kubuntu Linux 13.04.

dotancohen
quelle

Antworten:

18

Die Manpage ist in diesem Punkt nicht sehr klar, aber die Infoseite geht auf Folgendes ein:

1.2 Unterdrücken von Unterschieden im Leer- und Tabulatorabstand

Die Option --ignore-tab-expansion( -E) ignoriert die Unterscheidung zwischen Tabulatoren und Leerzeichen bei der Eingabe. Ein Tabulator entspricht der Anzahl der Leerzeichen bis zum nächsten Tabulator (* Tabulatoren beachten: :).

Die Option --ignore-trailing-space( -Z) ignoriert Leerzeichen am Zeilenende.

Die --ignore-space-change( -b) Option ist stärker als -Eund -Zkombiniert. Leerzeichen am Zeilenende werden ignoriert, und alle anderen Folgen eines oder mehrerer Leerzeichen in einer Zeile werden als gleichwertig betrachtet. diffBetrachtet bei dieser Option die folgenden beiden Zeilen als äquivalent, wobei $das Zeilenende bezeichnet wird:

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

Die --ignore-all-space( -w) Option ist noch stärker. Unterschiede werden ignoriert, auch wenn eine Zeile Leerzeichen enthält, während die andere Zeile keine Leerzeichen enthält. Zu den "Leerzeichen" -Zeichen gehören Tabulator, vertikaler Tabulator, Formularvorschub, Wagenrücklauf und Leerzeichen. Einige Gebietsschemas definieren möglicherweise zusätzliche Zeichen als Leerzeichen. diff Betrachtet bei dieser Option die folgenden beiden Zeilen als äquivalent, wobei $das Zeilenende und ^Mein Wagenrücklauf angegeben werden:

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

Bei vielen anderen Programmen ist newline ebenfalls ein Leerzeichen, diffist jedoch ein zeilenorientiertes Programm und ein Newline-Zeichen beendet immer eine Zeile. Aus diesem Grund ignoriert die Option -woder --ignore-all-spaceÄnderungen in Bezug auf Zeilenumbrüche nicht. es ignoriert nur andere Leerraumänderungen.

mpy
quelle
6

Scheint, als ob es sich um Leerzeichen zwischen Wörtern handelt, aber das ist mein Ergebnis:

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 

Ergebnisse von -w ist nichts.

Carl Abrahamsson
quelle