比较文件
您经常可能需要比较文件的不同版本,或者将一个文件与参考文件进行比较。Linux 提供了几种工具来执行此操作,具体取决于您需要进行多深入的比较。
最常见的任务是比较两个文本文件。为此任务的首选工具是 diff。使用 diff,您可以逐行比较两个文件。默认情况下,diff 会注意到两个文本文件之间的任何差异,无论差异多么细微。这可能就像将一个文件中的空格字符更改为制表符一样简单。对于用户来说,文件看起来可能相同,但 diff 会发现这种差异。diff 的真正威力来自于忽略文件之间某些类型差异的选项。在上面的示例中,您可以使用 -b 或 --ignore-space-change 选项来忽略从空格字符到制表符的更改,这些选项告诉 diff 忽略一个文件到下一个文件之间空格数量的任何差异。
空白行呢?-B 或 --ignore-blank-lines 选项告诉 diff 忽略一个文件到下一个文件之间空白行数量的任何更改。通过这种方式,diff 在比较文件时有效地只关注实际字符,从而将 diff 的焦点缩小到实际内容。
如果这不足以满足您的情况呢?您可能需要比较一些文件,其中一个文件由于某种原因是在 Caps Lock 开启的情况下输入的,或者可能是使用的终端配置错误。您可能不希望 diff 将大小写的简单差异报告为“实际”差异。在这种情况下,请使用 -i 或 --ignore-case 选项。
如果您正在处理来自 Windows 计算机的文件呢?每个在 Linux 和 Windows 上工作的人都遇到过文本文件行尾的问题。Linux 仅需要单个换行符,而 Windows 使用回车符和换行符。diff 可以使用 --strip-trailing-cr 选项忽略这一点。
diff 的输出可以采用几种不同的格式。默认格式包含不同的行,以及问题行之前和之后的一些行。这些额外的行称为上下文,可以使用“-c”、“-C”或“--context=”选项以及用于上下文的行数来设置。此默认输出可供 patch 程序使用,以将一个文件更改为另一个文件。通过这种方式,您可以创建源代码补丁,以将代码从一个版本升级到下一个版本。diff 还可以输出 ed 可以用作脚本的文件差异,使用 -e 或 --ed 选项。diff 还可以使用 -n 或 --rcs 选项输出 RCS 格式的差异。另一个选项是以两列并排打印差异,使用 -y 或 --side-by-side 选项。
diff 实用程序仅比较两个文件。如果您需要比较三个文件怎么办?diff3 可以派上用场。此实用程序比较三个文件并打印出 diff 语句。同样,您可以使用 -e 选项来打印出适用于 ed 编辑器的脚本。
如果您只是想查看两个文件以及它们的差异呢?另一个实用程序可能正是您所寻找的,即 comm。在没有其他选项的情况下,comm 接受两个文件并打印出三列。第一列包含第一个文件独有的行,第二列包含第二个文件独有的行,第三列包含两个文件共有的行。您可以使用选项 -1、-2 和 -3 有选择地抑制这些列中的每一列。它们分别抑制第 1、2 或 3 列。
虽然这对于文本文件非常有效,但如果您需要比较两个二进制文件怎么办?您需要某种方法来比较每个文件中的每个字节。使用 cmp 实用程序,它对两个文件进行逐字节比较。默认输出是打印出哪个字节和行包含差异。如果您想查看字节值是什么,请使用 -b 选项。-l 选项提供更多细节,打印出字节计数和来自两个文件的字节值。
借助这些实用程序,您可以开始更好地掌握文件的变化情况。希望您能掌控好您的文件!