diff命令输出格式解读
diff命令输出格式解读
1. diff命令的用法
diff
命令可以比较两个文件(或者文件夹)的差异。
命令的用法是:
diff [选项] 改动前的文件(夹) 改动后的文件(夹)
如果是文件夹的比较,需要加【-r】选项。
关于其他很多选项,可以自行查资料,这里略。
2. diff的三种输出格式
由于历史原因,diff有三种格式:
- 普通格式(normal diff)
- 上下文格式(context diff),需要加
-c
选项 - 合并格式(unified diff),需要加
-u
选项
为了便于讲解,我们先建立两个文本文件。文件名分别是f1(改动前)和f2(改动后)。
f1的内容是:
a
a
a
a
f2的内容是:
a
a
b
c
d
2.1 普通格式
命令行输入
$ diff f1 f2
得到的结果是
3,4c3,5
< a
< a ---
> b
> c
> c
上面的输出分为4个部分。
2.1.1 3,4c3,5
用来说明变动位置。
它又分成三个部分:
- 前面的
3,4
,表示f1的第3~4行; - 中间的
c
表示变动的模式是内容改变(change),其他的模式还有a
(增加,addition)和d
(删除,deletion); - 后面的
3,5
,表示f2的第3~5行。
2.1.2 f1
中要删除哪些行
< a
< a
前面的小于号,表示要从f1中去除该行,后面的“a”表示该行的内容。
2.1.3 分割线
---
用于分割f1和f2的变动情况。
2.1.4 f2
中要增加哪些行
> b
> c
> c
前面的大于号表示f2增加了该行,后面的”b”或者”c”表示该行的内容。
2.2 上下文格式
使用方法是加入-c
选项(代表context)。
diff -c f1 f2
输出结果如下
*** f1 2016-04-17 11:48:13.008810500 +0800
--- f2 2016-04-17 11:48:24.090444400 +0800
***************
*** 1,4 ****
a
a
! a
! a
--- 1,5 ----
a
a
! b
! c
! c
上面的输出结果分为4个部分。
2.2.1 文件名和时间信息
*** f1 2016-04-17 11:48:13.008810500 +0800
--- f2 2016-04-17 11:48:24.090444400 +0800
特别注意:***
表示变动前的文件,---
表示变动后的文件。
2.2.2 分割线
***************
2.2.3 变动之前的文件f1
*** 1,4 ****
a
a
! a
! a
*** 1,4 ****
表示变动前的文件(即f1)的第1~4行。
另外,文件内容的每一行最前面,都有一个标记位。如果为空,表示该行无变化;如果是(!),表示该行有改动;如果是减号(-),表示该行被删除;如果是加号(+),表示该行为新增。
2.2.4 变动后的文件f2
--- 1,5 ----
a
a
! b
! c
! c
--- 1,5 ----
表示变动后的文件(即f2)的第1~5行。其他如上文所述。
2.3 合并格式
如果两个文件相似度很高,那么上下文格式的diff,将显示大量重复的内容,很浪费空间。1990年,GNU diff率先推出了“合并格式”的diff,将f1和f2的上下文合并在一起显示。
它的使用方法是加入-u
选项(代表unified)。
输入命令
$ diff -u f1 f2
输出结果是
--- f1 2016-04-17 11:48:13.008810500 +0800
+++ f2 2016-04-17 11:48:24.090444400 +0800
@@ -1,4 +1,5 @@
a
a
-a
-a
+b
+c
+c
上面的结果分为3个部分。
2.3.1 文件名和时间信息
--- f1 2016-04-17 11:48:13.008810500 +0800
+++ f2 2016-04-17 11:48:24.090444400 +0800
---
表示变动前的文件,+++
表示变动后的文件。
2.3.2 变动位置
@@ -1,4 +1,5 @@
变动的位置放在两组@@
之间。-1,4
表示对于变动前的文件,从第1行开始(包括第1行)连续4行(即1,2,3,4行)。+1,5
表示对于变动后的文件,从第1行开始(包括第1行)连续5行(即1,2,3,4,5行)。
2.3.3 变动的具体内容
a
a
-a
-a
+b
+c
+c
它将两个文件的上下文,合并在一起显示,所以叫做”合并格式”。每一行最前面的标志位,空表示无变动,减号表示第一个文件删除的行,加号表示第二个文件新增的行或者说在第一个文件的基础上增加的行。
其实变动一个文件,就好比改装汽车,可以看成是拆掉一分部零件(-)再装上一部分零件(+)的过程。
下图说明了行号和文件的对应关系。
【end】
参考资料
阮一峰:读懂diff
还没有评论,来说两句吧...