Diff -b 和 -w 差异

Diff -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一定是-b类型空格(制表符 vs. 空格)。然而,情况似乎并非如此:

$ 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 进行了测试。

答案1

手册页对这一点的说明不是很清楚,但信息页进行了详细说明:

1.2 抑制空白和制表符间距的差异

--ignore-tab-expansion( )选项-E忽略输入中的制表符和空格之间的区别。制表符被视为等于到下一个制表位的空格数(*注释 Tabs::)。

--ignore-trailing-space( )选项-Z忽略行尾的空格。

--ignore-space-change( )选项比和 组合-b更强。它会忽略行尾的空格,并将一行中所有其他一个或多个空格字符序列视为等效。使用此选项,会将以下两行视为等效,其中表示行尾:-E-Zdiff$

 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选项不会忽略与换行符相关的更改;它只会忽略其他空格更改。

答案2

看起来单词之间的空格可能更多,但这是我的结果:

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 的结果为空。

相关内容