Linux diff命令詳解

dapan發表於2021-09-09

diff(difference)命令常用來比較兩個檔案中的內容。diff 命令在最簡單的情況下,比較兩個檔案的不同。如果使用“-”代替“檔案”引數,則要比較的內容將來自標準輸入。下面良許小編就將Linux diff命令進行詳述,希望對大家有所幫助。

圖片描述

diff 命令是以逐行的方式比較文字檔案的異同處。如果該命令指定進行目錄的比較,則將會比較該目錄中具有相同檔名的檔案,而不會對其子目錄檔案進行任何比較操作。

diff 命令的基本格式有兩種,分別如下:

  1. 比較檔案

[root@liangxu ~]# diff [選項] 檔名1 檔名2

  1. 比較目錄。

[root@liangxu ~]# diff [選項] 目錄1 目錄2

diff 命令常用的選項及功能如表 1 所示。

選 項 功 能
-行數 指定要顯示多少行的文字。此引數必須與 -c 或 -u 引數一併使用
-a diff 只會逐行比較文字檔案
-b 不檢查空格字元的不同
-B 不檢查空白行
-c 顯示全部內文,並標出不同之處
-c 行數 與執行“-c-行數”指令相同
-d 使用不同的演演算法,以較小的單位來做比較
-D 此引數的輸出格式可用於前置處理器巨集
-e 此引數的輸出格式可用於 ed 的 script 檔案
-f 輸出的格式類似 ed 的 script 檔案,但按照原來檔案的順序來顯示不同處
-H 比較大檔案時,可加快速度
-I 若兩個檔案在某幾行有所不同,而這幾行同時都包含了選項中指定的字元或字串,則不顯示這兩個檔案的差異
-i 不檢查大小寫的不同
-l 將結果交由 pr 程式來分頁
-n 將比較結果以 RCS 的格式來顯示
-N 在比較目錄時,若檔案 A 僅出現在某個目錄中,預設會顯示:Only in目錄:檔案 A 若使用 -N 參 數,則 diff 會將檔案 A 與一個空白的檔案比較
-p 若比較的檔案為 C 語言的程式碼檔案時,顯示差異所在的函式名稱
-P 與 -N 類似,但只有當第二個目錄包含了一個第一個目錄所沒有的檔案時,才會將這個檔案與空 白的檔案做比較
-q 僅顯示有無差異,不顯示詳細的資訊
-r 比較子目錄中的檔案
-s 若沒有發現任何差異,仍然顯示資訊
-S 從指定的檔案開始比較目錄
-t 在輸出時,將 tab 字元展開
-T 在每行前面加上 tab 字元以便對齊
-u 以合併的方式來顯示檔案內容的不同
-v 顯示版本資訊
-w 忽略全部的空格字元
-W 在使用 -y 引數時,指定欄寬
-x 不比較選項中所指定的檔案或目錄
-X 可以將檔案或目錄型別存成文字檔案,然後在?中指定此文字檔案
-y 以並列的方式顯示檔案的異同之處
–help 顯示幫助
–left-column 在使用 -y 引數時,若兩個檔案某一行內容相同,則僅在左側的欄位顯示該行內容

diff 命令的顯示結果有以下兩種方式:

  • < 表示第一個檔案中的資料行。
  • &gt; 表示第二個檔案中的資料行。

注意,diff 命令能夠分析並輸出兩個檔案的不同的行。diff 的輸出結果表明需要對一個檔案做怎樣的操作之後才能與第二個檔案相匹配(與第一個檔案相比,第二個檔案發生了哪些變化),其中包含三種操作分別為:a=add,c=change,d=delete。diff 命令並不會改變檔案的內容,但是 diff 可以輸出一個 ed 指令碼來應用這些改變。

【例 1】比較兩個檔案的不同。
建立兩個樣本檔案,分別命名為 text 和 text1,並分別輸入以下內容:

//test
11
22

33
44
55

66
77
//test1
11
22
aa
33
44
55
bb
66

在終端頁面中輸入命令如下:

[root@liangxu ~]# diff test test1
3c3
<

&gt; aa
7c7
<

&gt; bb
9,10d8
< 77
<

輸出資訊的含義分別為:

  • “3c3”:表示第一個檔案的第 3 行需要修改才能和第二個檔案的第3行相匹配;
  • “—”:表示分隔線;
  • “>aa”:> 表示第二個檔案,第一個檔案中需要新增的內容為 aa,該內容存放在第二個檔案中;
  • “>bb”:> 表示第二個檔案,第一個檔案中需要新增的內容為 bb,該內容存放在第二個檔案中;
  • “9,10d8”:表示刪除第一個檔案中的第 9 和第 10 行才能和第二個檔案中的第 8 行相匹配;
  • “<77”:表示第一個檔案中待刪除的內容為 77。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/758/viewspace-2826926/,如需轉載,請註明出處,否則將追究法律責任。