Linux文字比較命令 diff

2021-09-21 19:54:34 字數 4788 閱讀 4900

diff 命令是 linux上非常重要的工具,用於比較檔案的內容,特別是比較兩個版本不同的檔案以找到改動的地方。diff在命令列中列印每乙個行的改動。最新版本的diff還支援二進位制檔案。diff程式的輸出被稱為補丁 (patch),因為linux系統中還有乙個patch程式,可以根據diff的輸出將a.c的檔案內容更新為b.c。diff是svn、cvs、git等版本控制工具不可或缺的一部分。

命令格式:

diff [引數][變動前的檔案1或目錄1][變動後的檔案2或目錄2]

命令功能:

diff命令能比較單個檔案或者目錄內容。如果指定比較的是檔案,則只有當輸入為文字檔案時才有效。以逐行的方式,比較文字檔案的異同處。如果指定比較的是目錄的的時候,diff 命令會比較兩個目錄下名字相同的文字檔案。列出不同的二進位制檔案、公共子目錄和只在乙個目錄出現的檔案。

命令引數:

-y或--side-by-side  以並列的方式顯示檔案的異同之處。

-w或--width  在使用-y引數時,指定欄寬(file1與file2行距)

-c  顯示全部內文,並標出不同之處。

-u,-u或--unified=  以合併的方式來顯示檔案內容的不同。

-r或--recursive  比較子目錄中的檔案。

-n或--new-file  在比較目錄時,若檔案a僅出現在某個目錄中,缺省會顯示:only in目錄:檔案a若使用-n引數,則diff會將檔案a與乙個空白的檔案比較。

-b或--ignore-space-change  不檢查空格字元的不同

-b或--ignore-blank-lines  不檢查空白行。

-h或--speed-large-files  比較大檔案時,可加快速度。

-l或--ignore-matching-lines  若兩個檔案在某幾行有所不同,而這幾行同時都包含了選項中指定的字元或字串,則不顯示這兩個檔案的差異。

-i或--ignore-case  不檢查大小寫的不同。

-q或--brief  僅顯示有無差異,不顯示詳細的資訊。

-r或--recursive  比較子目錄中的檔案。

-s或--report-identical-files  若沒有發現任何差異,仍然顯示資訊。

-s或--starting-file  在比較目錄時,從指定的檔案開始比較

-t或--expand-tabs  在輸出時,將tab字元展開。

-t或--initial-tab  在每行前面加上tab字元以便對齊。

-w或--ignore-all-space  忽略全部的空格字元。

-v或--version  顯示版本資訊。

例項

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

[root@proxyserver src]# cat a.txt

111

aaa

aaa

111aaa

aaa

aaa

111

[root@proxyserver src]# cat b.txt

111

aaa

aaa

111aaa

aaa

aaa

111

[root@proxyserver src]#

正常格式的diff如下

1

[root@proxyserver src]# diff a.txt b.txt 

4c4< 111aaa

---> 111aaa

[root@proxyserver src]#

diff結果第一行「4c4」是乙個提示,用來說明變動位置,前面的"4",表示f1的第4行有變化;中間的"c"表示變動的模式是內容改變(change),其他模式還有"增加"(a,代表addition)和"刪除"(d,代表deletion);後面的"4",表示變動後變成f2的第4行。

第二行「< 111aaa」,前面的小於號,表示要從f1當中去除該行(也就是第4行),後面的"111aaa"表示該行的內容。

第三行「---」用來分割f1和f2。

第四行「> 111aaa」,類似於第二行。前面的大於號表示f2增加了該行,後面的"111aaa"表示該行的內容。

上下文格式的diff如下

1

[root@proxyserver src]# diff -c a.txt b.txt

*** a.txt 2015-11-08 18:21:50.455124628 +0800  

--- b.txt 2015-11-08 18:21:53.391173006 +0800    

***************

*** 1,7 ****

111aaa

aaa! 111aaa

aaaaaa

111--- 1,7 ----

111aaa

aaa! 111aaa

aaaaaa

111[root@proxyserver src]#

第一部分顯示兩個檔案的基本情況:檔名和時間資訊,"***"表示變動前的檔案,"---"表示變動後的檔案。

第二部分#15個星號,將檔案的基本情況與變動內容分割開。

第三部分顯示變動前的檔案,即f1。這時不僅顯示發生變化的第4行,還顯示第4行的前面三行和後面三行,因此一共顯示7行。所以,前面的"*** 1,7 ****"就表示,從第1行開始連續7行。另外,檔案內容的每一行最前面,還有乙個標記位。如果為空,表示該行無變化;如果是感嘆號(!),表示該行有改動;如果是減號(-),表示該行被刪除;如果是加號(+),表示該行為新增。

四部分顯示變動後的檔案,即f2。

合併格式的diff

1

[root@proxyserver src]# diff -u a.txt b.txt

--- a.txt 2015-11-08 18:21:50.455124628 +0800

+++ b.txt    2015-11-08 18:21:53.391173006 +0800

@@ -1,7 +1,7 @@

111aaa

aaa-111aaa

+111aaa

aaaaaa

111[root@proxyserver src]#

第一部分,也是檔案的基本資訊。"---"表示變動前的檔案,"+++"表示變動後的檔案。

第二部分,變動的位置用兩個@作為起首和結束。前面的"-1,7"分成三個部分:減號表示第乙個檔案(即f1),"1"表示第1行,"7"表示連續7行。合在一起,就表示下面是第乙個檔案從第1行開始的連續7行。同樣的,"+1,7"表示變動後,成為第二個檔案從第1行開始的連續7行。

第三部分是變動的具體內容。除了有變動的那些行以外,也是上下文各顯示3行。它將兩個檔案的上下文,合併顯示在一起,所以叫做"合併格式"。每一行最前面的標誌位,空表示無變動,減號表示第乙個檔案刪除的行,加號表示第二個檔案新增的行。

併排格式輸出

1

2

3

4

5

6

7

8

9

[root@proxyserver src]# diff -y -w 50 a.txt b.txt

111         111

aaa         aaa

aaa         aaa

111aaa            |   111aaa

aaa         aaa

aaa         aaa

111         111

[root@proxyserver src]#

「|」表示前後2個檔案內容有不同

「<」表示後面檔案比前面檔案少了1行內容

「>」表示後面檔案比前面檔案多了1行內容

Linux文字比較命令 diff

diff 命令 diff 命令是 linux上非常重要的工具,用於比較檔案的內容,特別是比較兩個版本不同的檔案以找到改動的地方。diff在命令列中列印每乙個行的改動。最新版本的diff還支援二進位制檔案。diff程式的輸出被稱為補丁 patch 因為linux系統中還有乙個patch程式,可以根據d...

Linux文字比較命令 diff

diff 命令 diff 命令是 linux上非常重要的工具,用於比較檔案的內容,特別是比較兩個版本不同的檔案以找到改動的地方。diff在命令列中列印每乙個行的改動。最新版本的diff還支援二進位制檔案。diff程式的輸出被稱為補丁 patch 因為linux系統中還有乙個patch程式,可以根據d...

Linux常用文字比對命令 diff

在windows環境下我們通常會選擇使用功能強大顯示友好的beyond compare工具來進行檔案的比對。其實在linux系統中就自帶了同樣的強大比對命令,可以讓我們在linux系統下直接使用。diff命令用以比對兩個檔案的不同,功能強大使用方便。diff命令是逐行進行比對,如果命令使用在目錄下,...