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用来说明变动位置。

它又分成三个部分:
1. 前面的3,4,表示f1的第3~4行;
2. 中间的c表示变动的模式是内容改变(change),其他的模式还有a(增加,addition)和d(删除,deletion);
3. 后面的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

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值