Linux 上两个文件之间的空格差异

Rom*_*ski 17 linux diff whitespace

我有两个文件,当我与 diff 比较时,显示每一行都发生了变化。当我将它们与diff -w(忽略空格)进行比较时,它显示了我期望的一些最小变化。

显然每个文件中的空格之间存在一些差异,但我不知道它们是什么或如何找到它们。我尝试编辑文件以确保空格实际上是空格字符(而不是制表符),但我不确定还能做什么。

我使用 vim with:set list on来确认行尾没有尾随空格。

我也相信每个文件都有 Linux 行终止符,因为 vim 没有^M在行尾显示。

小智 16

在 FreeBSD 或大多数 Linux 系统上,您可以通过管道cat -v -e -t传输diff 的输出以显示空白差异。

diff file1 file2 | cat -vet
Run Code Online (Sandbox Code Playgroud)

制表符将显示为^I, a$将显示在每行的末尾,以便您可以看到尾随空格,而非打印字符将显示为^XM-X

如果你有 GNU coreutils(在大多数非繁忙的 Linux 发行版上可用),这可以简化为

diff file1 file2 | cat -A
Run Code Online (Sandbox Code Playgroud)

在 busybox 系统上,使用catv -vet.


Joh*_*024 7

对于vim用户来说,有一个方便的实用程序可以显示文件之间的确切差异:

vimdiff file1 file2
Run Code Online (Sandbox Code Playgroud)

这会将每个文件并排放置在窗口中,并以颜色突出显示差异。

一些有用的命令 vimdiff

在 中vimdiff,一些有用的命令是:

  • ]c: 跳转到下一个更改

  • [c: 跳转到上一个更改

  • ctrl-W ctrl-W: 切换到其他窗口

  • zo: 打开折叠

  • zc: 关闭褶皱

例子

下面是一个例子vimdiff中的xterm一个进行比较两个版本cups的配置文件:

在此处输入图片说明

您可以看到相同线条的长段已折叠。它们可以用 再次打开zo

配色方案将根据您的选项设置而有所不同。在上面的例子中,当一行出现在一个文件中而不是另一个文件中时,该行被赋予深蓝色背景。在另一个文件中,缺失的行用虚线表示。当一行出现在两个文件中但有一些差异时,行中未更改的部分为粉红色背景,更改的部分为红色背景。