1. 程式人生 > >教你一招Linux下文字比對方法

教你一招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,它的內容如下: ![](https://img2020.cnblogs.com/other/1218435/202009/1218435-20200915192606992-1078559866.jpg) 現在我們複製一份,命名為b.c,並將第3行小寫的"hello"改為大寫“HELLO",如下: ![](https://img2020.cnblogs.com/other/1218435/202009/1218435-20200915192607980-200662619.jpg) **(1)正常格式** 正常格式下我們無需加任何選項,直接如下比對就好: ``` diff a.c b.c ``` 執行完的結果如下: ![img](https://img2020.cnblogs.com/other/1218435/202009/1218435-20200915192608411-445097852.png) 我們一行一行來解釋上圖的含義。 **行一行: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,即上下文的意思。 ![img](https://img2020.cnblogs.com/other/1218435/202009/1218435-20200915192608783-185703755.webp) 上圖的輸出結果的具體含義如下: 第1行和第2行表示修改前及修改後的檔案及更新時間。下面的*** 1,4 ****表示a.c檔案顯示的從第1行開始到第4行為止的內容。hello world前的歎號(!)表示該行有改動,如果該行被刪除,則為減號(-),如果該行被增加,則為加號(+)。後面幾行的含義類似。 **(3)合併格式** 這種格式是正常格式與上下文格式的綜合版,同時這種格式也是git diff所採用的格式。使用這種格式的命令是: ``` diff -u a.c b.c ``` ![img](https://img2020.cnblogs.com/other/1218435/202009/1218435-20200915192609144-331123019.webp) 上圖的輸出結果詳細含義如下: 第1行和第2行表示修改前及修改後的檔案及更新時間。後面的-hello world!表示原檔案a.c裡的內容,+HELLO world!表示b.c裡的內容。 除了以上三種格式外,還有另外一直更直觀的方式——並排格式。這種顯示格式的命令格式如下: ``` diff a.c b.c -y -W 50 ``` ![img](https://img2020.cnblogs.com/other/1218435/202009/1218435-20200915192609654-1639676969.webp) 這種格式就是以並列的格式進行顯示,也很直觀明瞭。第3行裡,有個“|”符號,表示這行有更改。另外,如果前面是“<”,表示後面檔案比前面檔案少了1行內容;如果是">",表示後面檔案比前面檔案多了1行內容。 更多精彩內容,請關注公眾號**良許Linux**,公眾內回覆**1024**可免費獲得5T技術資料,包括:**Linux,C/C++,Python,樹莓派,嵌入式,Java,人工智慧**,等等。公眾號內回覆**進群**,邀請您進高手如雲技術交流群。 ![img](http://pbe9kvqil.bkt.clouddn.com/FmsDX2j5rcQ7DjY8p-KYTN7m5uNu) --- 公眾號:良許Linux ### 有收穫?希望老鐵們來個三連擊,給更多的人看到這