當前位置:
首頁 > 知識 > diff,Linux下文本比對方法

diff,Linux下文本比對方法



來自:良許Linux(微信號:liangxuxiansheng)



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




有經驗的程序員都知道,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,它的內容如下:






現在我們複製一份,命名為b.c,並將第3行小寫的"hello"改為大寫「HELLO",如下:







(1)正常格式



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



diff

 

a

.c

 

b

.c





執行完的結果如下:







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




行一行: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,即上下文的意思。







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




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




(3)合併格式




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



diff

 

-u

 

a

.c

 

b

.c








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




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




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



diff

 

a

.c

 

b

.c

 

-y

 

-W

 50







這種格式就是以並列的格式進行顯示,也很直觀明了。第3行里,有個「|」符號,表示這行有更改。另外,如果前面是「<」,表示後面文件比前面文件少了1行內容;如果是">",表示後面文件比前面文件多了1行內容。




●編號648,輸入編號直達本文



●輸入m獲取文章

目錄

推薦↓↓↓



運維


更多推薦

25個技術類公眾微信


涵蓋:程序人生、演算法與數據結構、黑客技術與網路安全、大數據技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Linux學習 的精彩文章:

TAG:Linux學習 |