天天看點

教你一招Linux下文本比對方法

我們在寫代碼的過程中,免不了會對代碼進行一些修修改改。但經常會出現改着改着,就不知道改完後與源檔案的差異是怎樣的。這裡,我們就需要一個文本比對工具來進行文本比對。

有經驗的程式員都知道,Windows下有個很好用的文本比對工具——BeyondCompare。但它是收費軟體,很多正規的公司是不允許使用破解軟體的。而且,它也隻能在Windows下使用,沒有Linux版本。

本文所介紹的文本比對方法,無需任何軟體,隻需一個Linux指令。學會這個指令,媽媽就再也不怕你不會文本比對了。

這個Linux指令就是diff指令。

diff是Unix系統的一個很重要的工具程式。它用來比較兩個文本檔案的差異,是代碼版本管理的基石之一。

首先我們來看它的基本指令格式。

diff [OPTION]... FILES           

很簡單吧。不過它的選項相當多,多到你懷疑人生。我們暫且不管那麼多,先學一些最常用的,畢竟時間要花在刀刃上。

-b ——  忽略一行中的空字元的差別(例如“Hello World!” 與 “Hello        World!!”認為是一樣的)

-B —— 忽略空白行

-i —— 忽略大小寫的不同

-r —— 如果diff後面接的目錄時,會遞歸比較子目錄中的檔案不同

我們再來具體看看如何進行文本比較。

diff指令的輸出格式有三種:

(1)正常格式(normal diff)

(2)上下文格式(context diff)

(3)合并格式(unified diff)

我們通過執行個體詳細介紹這三種輸出格式。比如我們現在有個檔案a.c,它的内容如下:

教你一招Linux下文本比對方法

現在我們複制一份,命名為b.c,并将第3行小寫的"hello"改為大寫“HELLO",如下:

教你一招Linux下文本比對方法

(1)正常格式

正常格式下我們無需加任何選項,直接如下比對就好:

教你一招Linux下文本比對方法

執行完的結果如下:

教你一招Linux下文本比對方法

我們一行一行來解釋上圖的含義。

行一行:3c3

第一個3表示檔案a.c中第3行有變化,後面的3表示a.c通過變化成為b.c中的第3行。中間的c就是具體的變化了。c表示改變(change),其它類型還有d删除(delete),a增加(addition)。

第二行:< hello world!

表示a.c檔案中去除第3行的内容,其中小于号表示去除。

第三行:------

分隔線

第四行:> HELLO world!

表示b.c檔案中增加第3行的内容,其中大于号表示增加。

(2)上下文格式

由于在正常格式下,提示資訊比較少,我們無法快速定位所修改的地方,經常需要打開檔案才知道修改細節。是以,為了給出更多的資訊,引入了上下文格式。它的使用指令如下:

diff -c a.c b.c           

其中,c表示context,即上下文的意思。

教你一招Linux下文本比對方法

上圖的輸出結果的具體含義如下:

第1行和第2行表示修改前及修改後的檔案及更新時間。下面的*** 1,4 ****表示a.c檔案顯示的從第1行開始到第4行為止的内容。hello world前的歎号(!)表示該行有改動,如果該行被删除,則為減号(-),如果該行被增加,則為加号(+)。後面幾行的含義類似。

(3)合并格式

這種格式是正常格式與上下文格式的綜合版,同時這種格式也是git diff所采用的格式。使用這種格式的指令是:

diff -u a.c b.c           
教你一招Linux下文本比對方法

上圖的輸出結果詳細含義如下:

第1行和第2行表示修改前及修改後的檔案及更新時間。後面的-hello world!表示原檔案a.c裡的内容,+HELLO  world!表示b.c裡的内容。

除了以上三種格式外,還有另外一直更直覺的方式——并排格式。這種顯示格式的指令格式如下:

教你一招Linux下文本比對方法

這種格式就是以并列的格式進行顯示,也很直覺明了。第3行裡,有個“|”符号,表示這行有更改。另外,如果前面是“<”,表示後面檔案比前面檔案少了1行内容;如果是">",表示後面檔案比前面檔案多了1行内容。

原文釋出時間為:2018-11-02

本文作者: 良許

本文來自雲栖社群合作夥伴“ 

良許Linux

”,了解相關資訊可以關注“ 

”。

繼續閱讀