如何在linux終端上比較兩個文字檔案

需要檢視文字檔案的兩個版本之間的差異嗎?那麼diff就是你需要的命令。本教程向您展示瞭如何在Linux和macOS上使用diff,這是一種簡單的方法。...

需要檢視文字檔案的兩個版本之間的差異嗎?那麼diff就是你需要的命令。本教程向您展示瞭如何在Linux和macOS上使用diff,這是一種簡單的方法。

潛入差異

diff命令比較兩個檔案並生成兩個檔案之間的差異列表。更準確地說,它生成了需要對第一個檔案進行更改的列表,以使其與第二個檔案匹配。如果你記住這一點,你會發現更容易理解diff的輸出。diff命令被設計用來找出原始碼檔案之間的差異,併產生一個可以被其他程式讀取和執行的輸出,比如patch命令。在本教程中,我們將介紹使用diff的最有用的人性化方法。

讓我們深入分析兩個檔案。命令列上檔案的順序決定了diff認為哪個檔案是“第一個檔案”,哪個檔案是“第二個檔案”。在下面的示例中,alpha1是第一個檔案,alpha2是第二個檔案。兩個檔案都包含拼音字母表,但第二個檔案alpha2經過了進一步編輯,因此兩個檔案不完全相同。

我們可以用這個命令比較檔案。鍵入diff、空格、第一個檔案的名稱、空格、第二個檔案的名稱,然後按Enter鍵。

diff alpha1 alpha2

如何在linux終端上比較兩個文字檔案

我們如何分析輸出?一旦你知道該找什麼就沒那麼糟了。每個差異依次列在一列中,並且每個差異都有標籤。標籤包含字母兩邊的數字,如4c4。第一個數字是alpha1中的行號,第二個數字是alpha2中的行號。中間的字母可以是:

  • c:第一個檔案中的行需要更改以匹配第二個檔案中的行。
  • d:必須刪除第一個檔案中的行才能與第二個檔案匹配。
  • 答:必須在第一個檔案中新增額外的內容,使其與第二個檔案匹配。

我們示例中的4c4告訴我們,必須將alpha1的第四行更改為與alpha2的第四行匹配。這是diff發現的兩個檔案之間的第一個差異。

在我們的示例alpha1中,以<開頭的行表示第一個檔案,以>開頭的行表示第二個檔案alpha2。這一行<Delta告訴我們單詞Delta是alpha1中第四行的內容。行>Dave告訴我們單詞Dave是alpha2中第四行的內容。總結一下,我們需要在alpha1的第四行用Dave替換Delta,使這兩個檔案中的行匹配。

下一個變化由12c12指示。應用同樣的邏輯,這告訴我們alpha1的第12行包含Lima這個詞,但是alpha2的第12行包含Linux這個詞。

第三個變化是指從alpha2中刪除的一行。標籤21d20被破譯為“需要從第一個檔案中刪除第21行以使兩個檔案從第20行開始同步”。<統一行顯示需要從alpha1中刪除的行的內容。

第四個差異標記為26a26,28。此更改涉及已新增到alpha2的三個額外行。注意標籤上的26,28。用逗號分隔的兩個行號表示一系列行號。在本例中,範圍是從第26行到第28行。標籤被解釋為“在第一個檔案的第26行,從第二個檔案中新增第26到28行”。這些詞包括古怪、奇怪和魅力。

一句俏皮話

如果您只想知道兩個檔案是否相同,請使用-s(報告相同的檔案)選項。

diff -s alpha1 alpha3

如何在linux終端上比較兩個文字檔案

您可以使用-q(brief)選項獲得關於兩個檔案不同的同樣簡潔的語句。

diff -q alpha1 alpha2

如何在linux終端上比較兩個文字檔案

需要注意的一點是,對於兩個相同的檔案,-q(brief)選項完全不公開,根本不報告任何內容。

另一種觀點

-y(並排)選項使用不同的佈局來描述檔案差異。在並排檢視中使用-W(width)選項通常很方便,可以限制顯示的列數。這避免了讓輸出難以讀取的難看的環繞行。這裡我們告訴diff生成並排顯示,並將輸出限制為70列。

diff -y -W 70 alpha1 alpha2

如何在linux終端上比較兩個文字檔案

命令列上的第一個檔案alpha1顯示在左側,命令列上的第二行alpha2顯示在右側。將並排顯示每個檔案中的行。在alpha2中的那些行旁邊有一些已被更改、刪除或新增的指示符。

  • |:第二個檔案中已更改的行。
  • <:已從第二個檔案中刪除的行。
  • >:已新增到不在第一個檔案中的第二個檔案的行。

如果您希望更緊湊地並排總結檔案差異,請使用--suppress common line選項。這將強制diff只列出更改、新增或刪除的行。

diff -y -W 70 --suppress-common-lines alpha1 alpha2

如何在linux終端上比較兩個文字檔案

新增一點顏色

另一個名為colordiff的實用程式將顏色高亮顯示新增到diff輸出中。這樣就更容易看出哪些行有差異。

如果您使用的是Ubuntu或其他基於Debian的發行版,請使用apt get將此軟體包安裝到您的系統上。在其他Linux發行版上,請改用Linux發行版的包管理工具。

sudo apt-get install colordiff

像使用diff一樣使用colordiff。

如何在linux終端上比較兩個文字檔案

實際上,colordiff是diff的包裝器,diff在幕後完成所有工作。因此,所有的diff選項都將使用colordiff。

如何在linux終端上比較兩個文字檔案

提供一些背景

為了在螢幕上顯示檔案中的所有行和只列出更改的行之間找到一些中間點,我們可以要求diff提供一些上下文。有兩種方法可以做到這一點。兩種方法都達到了相同的目的,即在每一行更改之前和之後顯示一些行。您將能夠在檢測到差異的地方看到檔案中發生了什麼。

第一個方法使用-c(複製的上下文)選項。

colordiff -c alpha1 alpha2

如何在linux終端上比較兩個文字檔案

diff輸出有一個標題。標頭檔案列出了兩個檔名及其修改時間。第一個檔名前有星號(*),第二個檔名前有破折號(-)。星號和破折號將用於指示輸出中的行屬於哪個檔案。

中間帶1,7的一行星號表示我們正在檢視alpha1中的行。準確地說,我們看的是第1行到第7行。單詞Delta被標記為已更改。它有一個感嘆號(!)在它旁邊,它是紅色的。在該行前後顯示了三行未更改的文字,因此我們可以在檔案中看到該行的上下文。

中間帶1,7的虛線告訴我們,我們現在看到的是來自alpha2的線。同樣,我們在看第1行到第7行,第4行的單詞Dave被標記為不同的。

預設值為每個更改上方和下方的三行上下文。您可以指定希望diff提供多少行上下文。為此,請使用帶大寫字母“C”的-C(複製上下文)選項,並提供所需的行數:

colordiff -C 2 alpha1 alpha2

如何在linux終端上比較兩個文字檔案

提供上下文的第二個diff選項是-u(統一上下文)選項。

colordiff -u alpha1 alpha2

如何在linux終端上比較兩個文字檔案

和前面一樣,我們在輸出上有一個標題。將命名這兩個檔案,並顯示它們的修改時間。字母1的名稱前有破折號(-),字母2的名稱前有加號(+)。這告訴我們破折號將用來表示alpha1,加號將用來表示alpha2。列表中分散著以at符號(@)開頭的行。這些線標誌著每個差異的開始。它們還告訴我們每個檔案中顯示了哪些行。

我們將在標記為不同的行之前和之後顯示三行,以便我們可以看到更改行的上下文。在統一檢視中,具有差異的線被一個一個地顯示出來。alpha1的行前面有一個破折號,alpha2的行前面有一個加號。這個顯示在8行中實現了上面複製的上下文顯示需要15行才能完成的任務。

正如您所期望的,我們可以要求diff提供我們希望看到的統一上下文的確切行數。為此,請使用帶大寫“U”的-U(統一上下文)選項,並提供所需的行數:

colordiff -U 2 alpha1 alpha2

如何在linux終端上比較兩個文字檔案

忽略空格和大小寫

讓我們分析另外兩個檔案,test4和test5。上面有六個超級英雄的名字。

colordiff -y -W 70 test4 test5

如何在linux終端上比較兩個文字檔案

結果表明,diff與黑寡婦、蜘蛛俠和雷神系沒有差異。它確實標誌著美國隊長,鐵人和綠巨人的變化。

有什麼不同?好吧,在test5中,Hulk是用小寫字母“h”拼寫的,美國隊長在“船長”和“美國”之間有一個額外的空格?沒有明顯的區別。這裡有一個很好的經驗法則。如果你看不見,答案是空白。幾乎可以肯定的是,在那一行的末尾有一兩個空格,或者一個製表符。

如果它們對您不重要,您可以指示diff忽略特定型別的線差異,包括:

  • -i:以防出現分歧。
  • -Z:忽略尾隨空格。
  • -b:忽略空白量的變化。
  • -w:忽略所有空白更改。

讓我們讓diff再次檢查這兩個檔案,但這次忽略任何差異。

colordiff -i -y -W 70 test4 test5

如何在linux終端上比較兩個文字檔案

帶有“The Hulk”和“The Hulk”的行現在被認為是匹配的,小寫的“h”沒有任何區別。

colordiff -i -Z -y -W 70 test4 test5

如何在linux終端上比較兩個文字檔案

正如所懷疑的,後面的空白一定是鐵人行上的差異,因為diff不再標記該行的差異。就剩下美國隊長了。讓我們讓diff忽略case,忽略所有空格問題。

colordiff -i -w -y -W 70 test4 test5

如何在linux終端上比較兩個文字檔案

透過告訴diff忽略我們不關心的差異,diff告訴我們,出於我們的目的,檔案匹配。

diff命令有更多的選項,但大多數選項與生成機器可讀的輸出有關。這些可以在Linux手冊頁上檢視。我們在上述示例中使用的選項將使您能夠使用命令列和人眼追蹤文字檔案版本之間的所有差異。

  • 發表於 2021-04-03 16:32
  • 閱讀 ( 44 )
  • 分類:網際網路

你可能感興趣的文章

macports為您的mac帶來了最好的開源軟體

...rts是所有這些優秀軟體的“應用商店”。讓我們看看它是如何工作的。 ...

  • 發佈於 2021-03-13 05:02
  • 閲讀 ( 59 )

linux終端的5個聯網命令

... 對於同時執行多個命令,請看一下如何在帶螢幕的Linux終端上執行多工。 ...

  • 發佈於 2021-03-13 15:30
  • 閲讀 ( 53 )

40多個最常用的linux終端命令

... 在您真正充分利用終端之前,您需要知道如何導航它。這就是為什麼我們認為這些是最基本的Linux命令:如果你不能更改目錄或者在一個你不記得如何使用的命令上獲得幫助,那麼再多的終端知識也幫不了你。 ...

  • 發佈於 2021-03-15 21:40
  • 閲讀 ( 50 )

如何用一個外掛讓notepad++比較兩個檔案

...可以讓您看到兩個檔案之間的視覺差異。我們將向您展示如何使用這個外掛來比較Notepad++中的兩個檔案。 ...

  • 發佈於 2021-03-20 01:58
  • 閲讀 ( 115 )

如何在帶螢幕的linux終端上進行多工處理

... 如何安裝螢幕 ...

  • 發佈於 2021-03-21 22:09
  • 閲讀 ( 41 )

linux命令參考備忘單

...便的Linux命令備忘單。如果您想執行其中的幾個,請檢視如何在帶螢幕的Linux終端上執行多工。 ...

  • 發佈於 2021-03-22 04:06
  • 閲讀 ( 57 )

啟動linux的9個基本命令

... 如何在linux下開啟終端 ...

  • 發佈於 2021-03-26 18:33
  • 閲讀 ( 59 )

如何在linux終端上操作影象

... 下面介紹如何使用Linux convert工具,它允許您透過命令列對終端執行所有這些操作,以及更多操作。 ...

  • 發佈於 2021-03-27 05:34
  • 閲讀 ( 68 )

如何在linux中建立新檔案

Linux中有幾種不同的應用程式和命令可以為您建立新檔案,即使不啟動應用程式。使用哪種方法取決於檔案的用途。讓我們看看這些選項,這樣您就可以知道哪一個對您最有用。 ...

  • 發佈於 2021-03-28 22:06
  • 閲讀 ( 56 )

linux上的stdin、stdout和stderr是什麼?

...定向到/dev/null。 檢測指令碼中的重定向 我們討論了命令如何檢測是否有任何流被重定向,以及如何選擇相應地改變其行為。我們能用自己的指令碼來完成嗎?是的,我們可以。這是一個很容易理解和運用的技巧。 在編輯器中鍵...

  • 發佈於 2021-04-03 06:21
  • 閲讀 ( 48 )
qiang2663905
qiang2663905

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦