diff命令输出格式解读
diff命令輸出格式解讀
1. diff命令的用法
diff命令可以比較兩個文件(或者文件夾)的差異。
命令的用法是:
如果是文件夾的比較,需要加【-r】選項。
關于其他很多選項,可以自行查資料,這里略。
2. diff的三種輸出格式
由于歷史原因,diff有三種格式:
- 普通格式(normal diff)
- 上下文格式(context diff),需要加-c選項
- 合并格式(unified diff),需要加-u選項
為了便于講解,我們先建立兩個文本文件。文件名分別是f1(改動前)和f2(改動后)。
f1的內容是:
f2的內容是:
a a b c d2.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 ****aa ! a ! a --- 1,5 ----aa ! 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 ****aa ! a ! a*** 1,4 ****表示變動前的文件(即f1)的第1~4行。
另外,文件內容的每一行最前面,都有一個標記位。如果為空,表示該行無變化;如果是(!),表示該行有改動;如果是減號(-),表示該行被刪除;如果是加號(+),表示該行為新增。
2.2.4 變動后的文件f2
--- 1,5 ----aa ! 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 @@aa -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 變動的具體內容
aa -a -a +b +c +c它將兩個文件的上下文,合并在一起顯示,所以叫做”合并格式”。每一行最前面的標志位,空表示無變動,減號表示第一個文件刪除的行,加號表示第二個文件新增的行或者說在第一個文件的基礎上增加的行。
其實變動一個文件,就好比改裝汽車,可以看成是拆掉一分部零件(-)再裝上一部分零件(+)的過程。
下圖說明了行號和文件的對應關系。
【end】
參考資料
阮一峰:讀懂diff
總結
以上是生活随笔為你收集整理的diff命令输出格式解读的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序的加载和执行(六)——《x86汇编语
- 下一篇: mysql @符号_MySQL 数值类型