日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux常用命令--diff

發布時間:2024/9/21 linux 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux常用命令--diff 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

diff是Unix系統的一個很重要的工具程序。

它用來比較兩個文本文件的差異,是代碼版本管理的基石之一。你在命令行下,輸入:

$ diff <變動前的文件> <變動后的文件>

diff比較兩個文件或文件集合的差異,并記錄下來,生成一個diff文件,這也是我們常說的補丁文件。也使用patch命令對相應的文件打補丁。它的顯示結果不太好懂,下面我就來說明,如何讀懂diff。

FILES的格式:FILE1 FILE2 :源是一個文件,目標也是文件。這兩個文件必須是文本文件。以逐行的方式,比較文本文件的異同處。 DIR1 DIR2 :源是一個目錄,目標是目錄。diff 命令會比較兩個目錄下名字相同的文本文件,依照字母次序排序,列出不同的二進制文件,列出公共子目錄,列出只在一個目錄出現的文件。 FILE DIR :源是一個文件,目標是目錄。diff命令把源文件與目標目錄下的同名文件比較。 DIR FILE :源是一個目錄,目標是文件(不是目錄)。源目錄下所有文件中與目標文件同名的文件,將用來與目標文件比較。 FILE可以是“-”,代表由標準輸入設備讀入的文本。DIR不能是"-"。 被指定的文件不能是標準的輸入。

?

短選項長選項含義
-i--ignore-case忽略文件內容大小寫的區別
?--ignore-file-name-case忽略文件名大小寫的區別
?--no-ignore-file-name-case不忽略文件名大小寫的區別
-E--ignore-tab-expansion忽略由制表符寬度造成的差異
-b--ignore-space-change忽略由空格數不同造成的差異
-w--ignore-all-space忽略所有空格
-B--ignore-blank-lines忽略任何因空行而造成的差異
-I--ignore-matching-lines=RE如果某行匹配正則表達式,則忽略由該行造成的差異
-a--text所有文件都以文本方式處理
?--strip-trailing-cr去除輸入內容每行末端的 carriage return 字符
-c 或 或 -C 行數--context[=行數]顯示指定<行數>(默認 3 行)copied 格式的上下文
-u? 或 -U 行數--unified[=行數]顯示指定<行數>(默認 3 行)unified 格式的上下文(合并的方式)
?--label 標識使用<標識>代替文件名稱
-p--show-c-function顯示和每個差異有關的 C 函數名稱
-F?--show-function-line=RE顯示最接近而符合<正則表示式>的一行
-q--brief只顯示文件是否不同
-e--ed以 ed script 方式輸出
?--normal以正常的 diff 方式輸出
-n--rcs以 RCS diff 格式輸出
-y--side-by-side以兩列并排的方式顯示
-W--width=NUM每行顯示最多 NUM (默認 130) 個字符
?--left-column當有兩行相同時只顯示左邊的一行
?--suppress-common-lines當有兩行相同時不會顯示
-D--ifdef=NAME輸出的內容以‘#ifdef NAME’方式標明差異
?--GTYPE-group-format=GFMT效果類似,但會以 GFMT 格式處理 GTYPE 輸入的行
可以是LTYPE的選擇或是‘changed’
?--line-format=LFMT效果類似,但會以 LFMT 格式處理每一行資料
?--LTYPE-line-format=LFMT效果類似,但會以 LFMT 格式處理 LTYPE 輸入的行
LTYPE 可以是‘old’、‘new’或‘unchanged’。
-l--paginate將輸出送至‘pr’指令來分頁
-t--expand-tabs將輸出中的 tab 轉換成空格
-T--initial-tab每行先加上 tab 字符,使 tab 字符可以對齊
?--tabsize=NUM定位字符 (tab) 的寬度,默認為 8 個空格寬
?--suppress-blank-emptysuppress space or tab before empty output lines
-r--recursive遞歸比較子目錄中的文件
-N--new-file不存在的文件以空文件方式處理
?--unidirectional-new-file若第一文件案不存在,以空文件處理
-s--report-identical-files文件相同則報告,否則無任何提示
-x--exclude=PAT排除匹配 PAT 的文件
-X--exclude-from=FILE排除所有匹配在 FILE 中列出的模式的文件
-S--starting-file=FILE當比較目錄時,由 FILE 開始比較
?--from-file=FILE1將 FILE1 和操作數中的所有文件/目錄作比較。FILE1 可以是目錄
?--to-file=FILE2將操作數中的所有文件/目錄和 FILE2 作比較。FILE2 可以是目錄
?--horizon-lines=NUMkeep NUM lines of the common prefix and suffix
-d--minimal盡可能找出最小的差異
?--speed-large-files假設文件十分大而且其中含有許多微小的差異

一、diff的三種格式

由于歷史原因,diff有三種格式:

* 正常格式(normal diff) * 上下文格式(context diff) * 合并格式(unified diff)

我們依次來看。

二、示例文件

為了便于講解,先新建兩個示例文件。

log2014.log內容 2013-01 2013-02 2014-03 2013-04 2013-05 2013-06 2013-07 2013-07 2013-09 2013-10 2013-11 2013-12 log2013.log內容 2013-01 2013-02 2013-03 2013-04 2013-05 2013-06 2013-07 2013-08 2013-09 2013-10   

三、正常格式的diff

diff輸出格式(默認):
n1 a n3,n4 表示在文件1的n1行后面添加n3到n4行
n1,n2 d n3 表示刪除n1到n2行,合并到目標文件的n3行
n1,n2 c n3,n4 表示把n1,n2行用n3,n4行替換掉
字母a:表示附加(add)
字符c:表示修改(change)
字符d:表示刪除(delete)
字母前的是源文件,字母后是目標文件。Nx表示行號。
以”<”打頭的行屬于第一個文件,以”>”打頭的行屬于第二個文件。

比較兩個文件

[root@localhost test3]# diff log2014.log log2013.log 3c3 < 2014-03 --- > 2013-03 8c8 < 2013-07 --- > 2013-08 11,12d10 < 2013-11 < 2013-12

上面的“3c3”和“8c8”表示log2014.log和log20143log文件在3行和第8行內容有所不同;"11,12d10"表示第一個文件比第二個文件多了第11和12行。

以”<”打頭的行屬于第一個文件,以”>”打頭的行屬于第二個文件。

并排格式輸出

[root@localhost test3]# diff log2014.log log2013.log -y -W 50 2013-01 2013-01 2013-02 2013-02 2014-03 | 2013-03 2013-04 2013-04 2013-05 2013-05 2013-06 2013-06 2013-07 2013-07 2013-07 | 2013-08 2013-09 2013-09 2013-10 2013-10 2013-11 < 2013-12 < [root@localhost test3]# diff log2013.log log2014.log -y -W 50 2013-01 2013-01 2013-02 2013-02 2013-03 | 2014-03 2013-04 2013-04 2013-05 2013-05 2013-06 2013-06 2013-07 2013-07 2013-08 | 2013-07 2013-09 2013-09 2013-10 2013-10 > 2013-11 > 2013-12

說明:

“|”表示前后2個文件內容有不同

“<”表示后面文件比前面文件少了1行內容

“>”表示后面文件比前面文件多了1行內容  

四、上下文格式的diff

上個世紀80年代初,加州大學伯克利分校推出BSD版本的Unix時,覺得diff的顯示結果太簡單,最好加入上下文,便于了解發生的變動。因此,推出了上下文格式的diff。

它的使用方法是加入c參數(代表context)。

[root@localhost test3]# diff log2013.log log2014.log -c

顯示結果如下:

*** log2013.log 2012-12-07 16:36:26.000000000 +0800 --- log2014.log 2012-12-07 18:01:54.000000000 +0800 *************** *** 1,10 **** 2013-01 2013-02 ! 2013-03 2013-04 2013-05 2013-06 2013-07 ! 2013-08 2013-09 2013-10 --- 1,12 ---- 2013-01 2013-02 ! 2014-03 2013-04 2013-05 2013-06 2013-07 ! 2013-07 2013-09 2013-10 + 2013-11 + 2013-12

這種方式在開頭兩行作了比較文件的說明,這里有三中特殊字符:

“+” 比較的文件的后者比前著多一行

“-” 比較的文件的后者比前著少一行

“!” 比較的文件兩者有差別的行

[root@localhost test3]# diff log2014.log log2013.log -c *** log2014.log 2012-12-07 18:01:54.000000000 +0800 --- log2013.log 2012-12-07 16:36:26.000000000 +0800 *************** *** 1,12 **** 2013-01 2013-02 ! 2014-03 2013-04 2013-05 2013-06 2013-07 ! 2013-07 2013-09 2013-10 - 2013-11 - 2013-12 --- 1,10 ---- 2013-01 2013-02 ! 2013-03 2013-04 2013-05 2013-06 2013-07 ! 2013-08 2013-09 2013-10   

五、合并格式的diff

如果兩個文件相似度很高,那么上下文格式的diff,將顯示大量重復的內容,很浪費空間。1990年,GNU diff率先推出了"合并格式"的diff,將比較文件的上下文合并在一起顯示。

它的使用方法是加入u參數(代表unified)。

[root@localhost test3]# diff log2014.log log2013.log -u --- log2014.log 2012-12-07 18:01:54.000000000 +0800 +++ log2013.log 2012-12-07 16:36:26.000000000 +0800 @@ -1,12 +1,10 @@ 2013-01 2013-02 -2014-03 +2013-03 2013-04 2013-05 2013-06 2013-07 -2013-07 +2013-08 2013-09 2013-10 -2013-11 -2013-12

第一部分,也是文件的基本信息:

--- log2014.log 2012-12-07 18:01:54.000000000 +0800

+++ log2013.log 2012-12-07 16:36:26.000000000 +0800

"---"表示變動前的文件,"+++"表示變動后的文件。


第二部分,變動的位置用兩個@作為起首和結束

@@ -1,12 +1,10 @@

前面的"-1,12"分成三個部分:減號表示第一個文件(即log2014.log),"1"表示第1行,"12"表示連續12行。意思:第一個文件從第1行開始的連續12行。

同樣的,"+1,10" 表示第二個文件從第1行開始的連續10行。

參考鏈接

http://www.lampweb.org/linux/3/17.html

http://www.ruanyifeng.com/blog/2012/08/how_to_read_diff.html

  

  

  

  

  

  

  

  

  

轉載于:https://www.cnblogs.com/stemon/p/5754542.html

總結

以上是生活随笔為你收集整理的linux常用命令--diff的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。