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

时间:2014-04-26 16:38:28

标签: colors diff whitespace

我发现this questiongit diff的答案。但是,我不是使用任何类型的版本控制来比较文件(我甚至没有在我想要比较的机器上有一个可用的文件)。

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

bash-3.2$ diff 6241 6242
690c690   
<         
---       
>         

但我不知道这是换行符,新行和空格,还是什么。我需要知道两个文件之间的确切变化,包括空格。我已经尝试了cmp -l -b并且它有效,但是当它发生很多变化时它很难被阅读,它也没有用。

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

作为另一个例子,我也尝试将diff的输出通过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                                    |    .|           

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

bash-3.2$ cmp -l -b 6241 6242
33571  12 ^J    40           
33590  40       12 ^J        
33591 165 u     40           
...

1 个答案:

答案 0 :(得分:1)

单独使用diff命令没有简单的方法可以做到这一点。解决问题的一种方法是使用cat -te将标签字符转换为^I,并在行尾添加$,以便更容易查看。

$ printf >test1 'hello \t \n'
$ printf >test2 'hello  \t\n'
$ diff test[12] | cat -te
1c1$
< hello ^I $
---$
> hello  ^I$