Разница -b и -w разница

20

Из diffсправочной страницы:

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

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

Исходя из этого, я делаю вывод , что разница между -bи -wвариантов должно быть то , что -bчувствительно к типу пробельных символов (Табуляция или пробелы). Тем не менее, это не так:

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

Итак, в чем разница между параметрами -bи -w? Протестировано с diffutils 3.2 на Kubuntu Linux 13.04.

dotancohen
источник

Ответы:

18

Страница man не очень ясна по этому вопросу, но информационная страница содержит:

1.2 Подавление различий между пробелами и интервалами табуляции

Опция --ignore-tab-expansion( -E) игнорирует различие между вкладками и пробелами при вводе. Вкладка считается равной количеству пробелов до следующей остановки табуляции (* note Tabs: :).

Опция --ignore-trailing-space( -Z) игнорирует пробел в конце строки.

Опция --ignore-space-change( -b) сильнее, чем -Eи в -Zсочетании. Он игнорирует пробелы в конце строки и считает все другие последовательности одного или нескольких символов пробела в строке эквивалентными. С этой опцией diffсчитает следующие две строки эквивалентными, где $обозначает конец строки:

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

Опция --ignore-all-space( -w) еще сильнее. Он игнорирует различия, даже если в одной строке есть пробел, а в другой нет ни одной. Символы «пробел» включают табуляцию, вертикальную табуляцию, подачу формы, возврат каретки и пробел; некоторые локали могут определять дополнительные символы как пробелы. С этой опцией diff считает следующие две строки эквивалентными, где $обозначает конец строки и ^Mобозначает возврат каретки:

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

Для многих других программ символ новой строки также является пробелом, но diffэто программа, ориентированная на строки, и символ новой строки всегда заканчивается строкой. Следовательно, опция -wor --ignore-all-spaceне игнорирует изменения, связанные с новой строкой; он игнорирует только другие изменения пробелов.

МРУ
источник
6

Похоже, это пробелы между словами, может быть, больше, но это мой результат:

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 

Результаты от -w ничего.

Карл Абрахамссон
источник