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

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

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

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

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

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

答案1

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

vimdiff file1 file2

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

一些有用的命令vimdiff

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

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

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

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

  • zo:打开折叠

  • zc:关闭折叠

例子

vimdiff以下是比较配置文件xterm两个版本的示例cups

在此处输入图片描述

您可以看到长段相同的行已被折叠。可以使用 重新打开它们zo

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

答案2

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

diff file1 file2 | cat -vet

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

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

diff file1 file2 | cat -A

在 busybox 系统上,使用catv -vet

答案3

要找出真正的空格和制表符在哪里,你可以使用sed以下方法替换它们:

$ cat file
  line 1
  line 2
    line 6
        line 7
$ sed 's/ /-/g; s/\t/<tab>/g' file
--line-1
--line-2
<tab>line-6
<tab><tab>line-7

现在比较这两个文件。

答案4

od可能会有所帮助。 Octal Dump 命令可以显示十六进制的内容。这可以帮助您查看文件中的字节,包括空字节或意外的空格。可能的常见原因可能是 LF 与 CRLF、制表符与空格或 ASCII 与 Unicode(通常可能在每个正常可见的字节之前只有一个空字节)。 od -x filename应该揭示任何这些模式。如果您想要一种更复杂的方式来查看文件,任何“十六进制编辑器”都可以很好地完成。好处是od,像cut命令一样,它内置于许多 Unix 系统中。因此,通常不需要单独安装。

如果您需要文件更相似,tr可以进行一些更改,并且sed可以进行更多更改。我可能会先ls -l查看哪个文件较大,然后查看字节以查看需要更改的内容,然后更改其中一个文件,使它们看起来更相似。

相关内容