马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
diff 是 Linux 里最基础也最常用的比对工具:逐行比较两个文本文件的异同,拿两个目录时则比对目录里同名文件(不递归进子目录)。本文整理它的常用参数,并用一个小例子把输出格式拆解清楚。
基本语法
diff [选项] 文件或目录1 文件或目录2
常用选项按用途分类记:
- 忽略差异类:
-a/--text 按文本逐行比;-b 忽略空格变化;-B 忽略空白行;-w 忽略全部空格;-i 忽略大小写;-I 只忽略包含指定字符串的行。
- 输出格式类:
-c 显示全部内文并标出不同;-u/-U/--unified 用合并方式显示;-y/--side-by-side 并列显示;-q/--brief 只报有没有差异;-s 即使相同也报告。
- 目录比较类:
-r 递归比较子目录;-N 把只存在于一侧的文件当作空文件比较;-S 从指定文件开始比;-x/-X 排除指定文件或按文件排除。
- 其他:
-n 用 RCS 格式输出;-e/-f 输出适合 ed 脚本;-p 比较 C 代码时显示所在函数名;-H 大文件加速;-t 展开 tab;-T 首行对齐加 tab;-v 看版本;--help 看帮助。
实际例子
假设有两个文件,file1 内容依次是 Hi、Hello、How are you?、I am fine,、Thank you.;file2 是 Hello、Hi、How are you?、I am fine.。跑一下:
$ diff file1 file2
1d0
< Hi,
2a2
> Hi,
4,5c4
< I am fine,
< Thank you.
---
> I am fine.
下面把 file1 当作旧文件、file2 当作新文件来解码:
1d0
< Hi,
# 意即旧文件第 1 行需要被删除(d),两文件才能对齐。旧文件中要删掉的行以 < 标记。
4,5c4
< I am fine,
< Thank you.
---
> I am fine.
其中 4,5c4 表示旧文件的第 4 到 5 行已被修改,需要用新文件第 4 行替换。添加的行以 > 标记,删除的行以 < 标记,--- 分隔新旧两侧。
几个好用的组合
- 只想看结论:
diff -q a.conf b.conf,有差异才输出一行提示。
- 看改动上下文:
diff -u old.conf new.conf,比默认输出友好得多。
- 并排看差异:
diff -y --width 120 a b。
- 比两个目录:
diff -rq dir1 dir2,一眼看出哪些文件不同、哪些只在一侧。
- 配置改动核对:
diff -u /etc/old/nginx.conf /etc/new/nginx.conf。
小结
diff 的输出是给机器看的,所以初看有点难读,记住三个符号就够了:< 是旧文件那侧、> 是新文件那侧、--- 分隔两侧。配上 -u 看上下文、-q 给结论、-r 比目录,日常排障基本够用。
qidao123.com企服评测-应用市场 编辑提示 |