sdiff 并排比较
sdiff 属于 GNU diffutils,把两个文件逐行并排显示,用标记指出哪些行是左侧独有、右侧独有、内容不同,相同的行原样对齐输出。它面向人工核对:审配置变更、讲清两份清单差在哪、把手工挑选的结果合并成第三个文件,都是它的常见用法。底层仍是 diff 算法,但输出为左右两栏。
基本信息
| 适用平台 | Linux(GNU diffutils);macOS 自带 BSD 版,选项较少 |
|---|---|
| 语法 | sdiff [选项] 文件1 文件2 |
| 交互合并 | sdiff -o 输出文件 左 右,逐处询问保留哪一侧 |
| 退出码 | 无差异 0、有差异 1、出错 2,与 diff 同族 |
典型使用场景
- 上线前人工审阅配置变更,一眼看出新增与删除的行
- 把内核参数、nginx 配置两份版本的差异讲给同事听
- 对两份导出清单做人工核对,只看差异行提高效率
- 交互式合并:以一份为基础,逐处挑选另一份的决定,生成第三份文件
- 校对手工维护的文档与自动生成版本是否一致
常用示例
常用示例
sdiff -w 120 old.conf new.conf # 宽度 120 并排对比,适合宽终端
sdiff -s old.conf new.conf # 只显示有差异的行
sdiff -l old.conf new.conf # 相同行只打印左栏,输出更紧凑
sdiff -i old.conf new.conf # 忽略大小写差异
sdiff -b old.conf new.conf # 忽略行尾空白差异
sdiff -o merged.conf left right # 交互式合并生成第三份文件
echo $? # 0 相同、1 有差异、2 出错并排标记读法
| 标记 | 含义 | 处理建议 |
|---|---|---|
| < | 该行只在左侧文件中存在 | 确认是删除还是左侧更旧 |
| > | 该行只在右侧文件中存在 | 确认是新增还是右侧更旧 |
| | | 两侧同一位置内容不同 | 逐处判断采用哪一侧 |
| 无标记 | 两侧内容完全相同 | 用 -l 可让这类行只出现在左栏 |
| -o 交互提示 | 每处差异询问输入 l、r、e 等指令 | 批处理场景改用 diff 生成补丁 |
中文属于宽字符,sdiff 按显示宽度计算栏宽,并排后常常对不齐。核对中文内容时把宽度调到 100 左右,或直接只用 -s 输出差异行。
sdiff -o 生成的合并结果依赖交互输入,每个差异都要回答一次,无法脚本化;需要可复核的流程时用 diff 出补丁再 patch 应用。