我們在寫代碼的程序中,免不了會對代碼進行一些修修改改,但經常會出現改著改著,就不知道改完后與源檔案的差異是怎樣的,這里,我們就需要一個文本比對工具來進行文本比對,
有經驗的程式員都知道,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行內容,
更多精彩內容,請關注公眾號良許Linux,公眾內回復1024可免費獲得5T技術資料,包括:Linux,C/C++,Python,樹莓派,嵌入式,Java,人工智能,等等,公眾號內回復進群,邀請您進高手如云技術交流群,
公眾號:良許Linux
有識訓?希望老鐵們來個三連擊,給更多的人看到這篇文章
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/50406.html
標籤:Linux
上一篇:MATLAB無法運行
