web-dev-qa-db-ja.com

差分-bと-wの違い

diffマンページから:

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

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

このことから、-bオプションと-wオプションの違いは、-btypeの空白(タブとスペース)の影響を受けやすいことであると推測します。ただし、そうではないようです。

$ 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オプションの違いは何ですか? Kubuntu Linux 13.04のdiffutils 3.2でテストされています。

20
dotancohen

その点については、manページはあまり明確ではありませんが、infoページで詳しく説明しています。

1.2空白とタブの間隔の違いを抑制する

--ignore-tab-expansion-E)オプションは、入力時のタブとスペースの区別を無視します。タブは、次のタブストップまでのスペースの数と同等であると見なされます(* note Tabs::)。

--ignore-trailing-space-Z)オプションは、行末の空白を無視します。

--ignore-space-change-b)オプションは、-E-Zを組み合わせたものよりも強力です。行末の空白は無視され、行内の1つ以上の空白文字の他のすべてのシーケンスは同等であると見なされます。このオプションを使用すると、diffは次の2行を同等と見なします。ここで、$は行の終わりを示します。

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

--ignore-all-space-w)オプションはさらに強力です。一方の行に空白があり、もう一方の行には空白がない場合でも、違いは無視されます。 「空白」文字には、タブ、垂直タブ、フォームフィード、キャリッジリターン、スペースが含まれます。一部のロケールでは、追加の文字を空白として定義できます。このオプションを使用すると、diffは次の2行を同等と見なします。ここで、$は行末を示し、^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オプションは、改行関連の変更を無視しません。他の空白の変更のみを無視します。

18
mpy

単語間のスペースのように見えるかもしれませんが、これは私の結果です:

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の結果は何もありません。

6