sdiff(英文全称为:side-by-side diff)命令是 Linux / FreeBSD 系统中的一个分栏差异对比工具,它把差异内容分为左右两栏,使用标准符号标记差异内容,使差异内容显示的更加直观。

下面将会详细的介绍 sdiff 命令的使用方法。

sdiff 命令语法

sdiff 命令的基本语法:

sdiff [选项] 文件1 文件2

语法解释说明:

  • [选项]:用于控制如何比较两个文件的内容
  • 文件1:用于比较的左侧的文件
  • 文件2:用于比较的右侧的文件

差异符号详解

符号 含义
< 只在左侧文件中存在的内容行
> 只在右侧文件存在的内容行
| 两侧文件中内容不同的行
无任何符号 两侧文件中行的内容相同
\ 两侧文件中行的内容相同,但是右侧的行的末尾包含换行符
/ 两侧文件中行的内容相同,但是左侧的行的末尾包含换行符

sdiff 命令使用示例

简单并排比较

提供两个文件会分栏输出两个文件的差异:

sdiff file1.txt file2.txt

交互的合并差异

使用 -o <file> 选项可以比较两个文件,并根据差异决定选择那么文件的内容保存到 file 中:

sdiff -o merged.txt file1.txt file2.txt

如上命令先输出 file1.txt file2.txt 两个文件的差异,你可以根据输出的差异,输入交互命令选择相应的内容。

交互模式使用 ed 编辑器,进入编辑器后的使用方法请查看:Linux ed 命令 - 功能强大的行编辑器

可用的交互命令有:

  • ed:合并两个文件的内容,同时会添加一个标识,来标记内容来自哪个文件,然后进入 ed 编辑器
  • eb:合并两个文件的内容,然后进入 ed 编辑器
  • el, e1:选择左面的内容保存到合并的文件,然后进入 ed 编辑器
  • er, e2:选择右面的内容保存到合并的文件,然后进入 ed 编辑器
  • e :不把任何内容保存到合并后的文件,然后进入 ed 编辑器
  • l, 1:选择左面的内容保存到合并的文件,不进入 ed 编辑器
  • r, 2:选择右面的内容保存到合并的文件,不进入 ed 编辑器
  • q :保存两个文件中一样内容,并退出。

sdiff 命令选项详解

选项 说明 选项示例
输出控制
-w N, --width=N 设置最大的显示宽度 -w 100
-l, --left-column 如果行的内容相同,则只显示左侧内容
-s, --suppress-common-lines 不显示内容相同的行
-o FILE, --output=FILE 把比较结果合并到指定的文件中 -o merged.txt
差异算法
-d, --minimal 使用最小差异算法
--diff-program=PROG 指定使用的差异引擎 --diff-program=bdiff
-t, --expand-tabs 把制表符转换为空格 主要用于对齐文本内容
内容处理
-a, --text 将所有文件视为文本内容 多用于处理二进制
-b, --ignore-space-change 忽略空白带来的变化 多用于代码比较
-B, --ignore-blank-lines 忽略空行所造成的差异 多用于文档比较
-i, --ignore-case 忽略字符的大小写产生的差异 多用于配置比较
-E, --ignore-tab-expansion 忽略制表符所产生的差异 多用于源码比较
-Z, --ignore-trailing-space 忽略行尾的空格
-W, --ignore-all-space 忽略所有空白内容
高级功能
--speed-large-files 比较大文件时,进行比较优化
--help 显示帮助信息
-v, --version 显示版本信息
--strip-trailing-cr 去除文件内包含的回车符 处理从 Windows 复制来的文件

结语

sdiff 命令是一个分栏比较文件差异的命令,该命令能够直观的显示两个文件之间的差异,好对文件做出需要的处理。在本文中介绍了 sdiff 命令的语法结构,然后给出了一些使用示例,最后给出了 sdiff 命令选项的解释说明。

sdiff 命令可以跨系统在 Linux 各发行版和 FreeBSD 系统上使用。