Diferença -b e -w

20

Na página de diffmanual:

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

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

A partir disso, deduzo que a diferença entre as opções -be -wdeve ser -bsensível ao tipo de espaço em branco (guias versus espaços). No entanto, esse não parece ser o 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 
$

Então, qual é a diferença entre o -be-w opções ? Testado com diffutils 3.2 no Kubuntu Linux 13.04.

dotancohen
fonte

Respostas:

18

A página de manual não é muito clara nesse ponto, mas a página de informações é elaborada:

1.2 Suprimindo diferenças no espaço em branco e tabulação

A opção --ignore-tab-expansion( -E) ignora a distinção entre guias e espaços na entrada. Uma tabulação é considerada equivalente ao número de espaços para a próxima parada de tabulação (* note Tabs: :).

A opção --ignore-trailing-space( -Z) ignora o espaço em branco no final da linha.

A opção --ignore-space-change( -b) é mais forte que -Ee -Zcombinada. Ele ignora o espaço em branco no final da linha e considera todas as outras seqüências de um ou mais caracteres de espaço em branco em uma linha como equivalentes. Com esta opção, diffconsidera as duas linhas a seguir equivalentes, onde $denota o final da linha:

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

A opção --ignore-all-space( -w) é mais forte ainda. Ele ignora as diferenças, mesmo que uma linha tenha espaço em branco onde a outra linha não tenha nenhum. Os caracteres "espaço em branco" incluem aba, aba vertical, alimentação de formulário, retorno de carro e espaço; alguns códigos de idioma podem definir caracteres adicionais como espaço em branco. Com esta opção, diff considera as duas linhas seguintes equivalentes, onde $denota o final da linha e ^Mindica um retorno de carro:

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

Para muitos outros programas, a nova linha também é um caractere de espaço em branco, mas diffé um programa orientado a linhas e um caractere de nova linha sempre termina uma linha. Portanto, a opção -wou --ignore-all-spacenão ignora as alterações relacionadas à nova linha; ignora apenas outras alterações de espaço em branco.

mpy
fonte
6

Parece que há espaços entre as palavras, talvez mais, mas este é o meu 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 

resultados de -w não são nada.

Carl Abrahamsson
fonte