Різниця -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варіантами? Тестовано з дифузорами 3.2 на Kubuntu Linux 13.04.

Відповіді:


18

Сторінка man не дуже зрозуміла з цього приводу, але на інформаційній сторінці уточнено:

1.2 Придушення відмінностей між порожніми та вкладками

Параметр --ignore-tab-expansion( -E) ігнорує відмінність між вкладками та пробілами на вході. Вкладка вважається еквівалентною кількості пробілів до наступної зупинки вкладки (* Примітка 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є лінійно орієнтованою програмою, а символ нового рядка завжди закінчується рядком. Отже, -wабо --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 - це нічого.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.