如何使用 diff 查看空格更改?

Mic*_*ael 7 diff whitespace colors

我发现这个问题有答案git diff。但是,我没有使用任何类型的版本控制来比较文件(我什至在我尝试比较的机器上没有可用的版本)。

基本上,类似于引用的问题,我试图查看空格的变化。该diff命令可能会显示:

bash-3.2$ diff 6241 6242
690c690   
<         
---       
>         
Run Code Online (Sandbox Code Playgroud)

但我不知道那是换行符,换行符和空格,还是什么。我需要知道两个文档之间的确切更改,包括空格。我已经尝试过cmp -l -b并且它有效,但是当有很多变化到它也不是真正有用的地步时,它很难阅读。

我真正想要的是让空白以某种方式呈现的某种方式,这样我就可以准确地说出空白是什么,例如颜色或 ^J、^M 等。我在手册中没有看到任何内容;diff --version显示 GNU 版本 2.8.1。

再举一个例子,我还尝试diff通过管道传输through的输出hexdump

bash-3.2$ diff 6241 6242 | hexdump -C                                         
00000000  36 39 30 63 36 39 30 0a  3c 20 0a 2d 2d 2d 0a 3e  |690c690.< .---.>|
00000010  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000020  20 20 20 20 0a                                    |    .|           
Run Code Online (Sandbox Code Playgroud)

从这一点上我很明显添加了一堆空格字符。但是,不明显的是在换行符之前插入了一个空格,这cmp告诉我:

bash-3.2$ cmp -l -b 6241 6242
33571  12 ^J    40           
33590  40       12 ^J        
33591 165 u     40           
...
Run Code Online (Sandbox Code Playgroud)

Stu*_*aie 14

diff单独使用命令没有简单的方法来做到这一点。解决问题的一种方法是使用cat -tewhich 将制表符转换为^I并写入$行尾,使其更易于查看。

$ printf >test1 'hello \t \n'
$ printf >test2 'hello  \t\n'
$ diff test[12] | cat -te
1c1$
< hello ^I $
---$
> hello  ^I$
Run Code Online (Sandbox Code Playgroud)