首页/系统/Linux 运维命令速查/sdiff 并排比较文件
文本处理77 条

sdiff 并排比较文件

左右并排显示两个文件的差异,适合人工核对;-o 还能交互式合并生成第三个文件。

Linux 运维命令速查系统更新于 2026-10-13

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 应用。

易错点

  • 中文宽字符会让并排两栏错位,误判成内容不同,核对前先用 -w 调整并抽查几行
  • 交互式合并(-o)每个差异都要求输入指令,放在自动化脚本里会直接卡住
  • 忽略大小写或空白的选项(-i、-b)会掩盖真实差异,确认变更时不要随手加
  • 把 sdiff 退出码 1 当成执行失败:它表示「两个文件有差异」,脚本判断条件要写清楚

数据来源与参考

  • man 1 sdiff(GNU diffutils 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌