补充说明
sdiff 是 GNU diffutils 中的工具,把两个文件按列并排显示,中间用 <、>、| 标出左侧独有、右侧独有和双方不同的行。它适合人工审阅配置变更,比统一的 diff 输出更直观。
使用 -o 文件 可以进入交互式合并:sdiff 逐段显示差异,等待输入 l(取左侧)、r(取右侧)、s(静默)、v(详细)、e(编辑)或 q(退出),最终写出合并结果。-s 可隐藏相同行,只看差异;-w 控制总宽度,-l 控制左栏宽度。
注意它按行比较,默认会忽略行尾空白差异需显式加选项;二进制文件应先确认再比较。合并前建议保留原文件副本,交互式输出不会自动备份。
语法
sdiff [选项] 文件1 文件2
选项
-o <文件>:交互式合并,结果写入指定文件-s, --suppress-common-lines:不显示相同行-w <列数>:设置输出总宽度-l <列数>:设置左栏宽度-i, --ignore-case:忽略大小写-b, --ignore-space-change:忽略空白数量变化-B, --ignore-blank-lines:忽略空行差异-W:忽略所有空白-t, --expand-tabs:把制表符展开为空格-a, --text:按文本比较
实例
# 并排查看两个配置文件的差异
sdiff /etc/nginx/nginx.conf.bak /etc/nginx/nginx.conf
# 只显示不同的行
sdiff -s old.conf new.conf
# 宽屏下指定总宽度与左栏宽度
sdiff -w 160 -l 70 a.txt b.txt
# 交互式合并:按提示选择左侧或右侧
sdiff -o merged.conf old.conf new.conf
# 忽略大小写和空白差异
sdiff -i -b a.txt b.txt
# 与 diff 对照,确认改动范围
diff -u old.conf new.conf | less