Diferencia -b y -w diferencia

20

Desde la página del diffmanual:

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

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

A partir de esto, infiero que la diferencia entre las opciones -by -wdebe ser -bsensible al tipo de espacio en blanco (tabulaciones frente a espacios). Sin embargo, ese no parece ser el caso:

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

Entonces, ¿cuál es la diferencia entre las opciones -by -w? Probado con diffutils 3.2 en Kubuntu Linux 13.04.

dotancohen
fuente

Respuestas:

18

La página del manual no es muy clara en ese punto, pero la página de información explica:

1.2 Supresión de diferencias en espacios en blanco y tabulación

La opción --ignore-tab-expansion( -E) ignora la distinción entre pestañas y espacios en la entrada. Se considera que una pestaña es equivalente al número de espacios para la siguiente tabulación (* note Tabs: :).

La opción --ignore-trailing-space( -Z) ignora los espacios en blanco al final de la línea.

La opción --ignore-space-change( -b) es más fuerte que -Ey -Zcombinada. Ignora el espacio en blanco al final de la línea y considera que todas las demás secuencias de uno o más caracteres de espacio en blanco dentro de una línea son equivalentes. Con esta opción, diffconsidera que las siguientes dos líneas son equivalentes, donde $denota el final de la línea:

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

La opción --ignore-all-space( -w) es aún más fuerte. Ignora las diferencias incluso si una línea tiene espacio en blanco donde la otra línea no tiene ninguna. Los caracteres de "espacio en blanco" incluyen tabulación, tabulación vertical, avance de formulario, retorno de carro y espacio; algunas configuraciones regionales pueden definir caracteres adicionales para ser espacios en blanco. Con esta opción, diff considera que las siguientes dos líneas son equivalentes, donde $denota el final de la línea y ^Mdenota un retorno de carro:

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

Para muchos otros programas, la nueva línea también es un carácter de espacio en blanco, pero diffes un programa orientado a líneas y un carácter de nueva línea siempre termina una línea. Por lo tanto, la opción -wo --ignore-all-spaceno ignora los cambios relacionados con la nueva línea; ignora solo otros cambios de espacio en blanco.

mpy
fuente
6

Parece que hay espacios entre palabras tal vez más, pero este es mi resultado:

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 

Los resultados de -w no son nada.

Carl Abrahamsson
fuente