Linux文字比較指令 diff,cmp 詳解

2021-08-08 11:24:43 字數 2954 閱讀 6368

一、文字檔案比較命令diff

1>diff命令的功能

linux中diff命令的功能為逐行比較兩個文字檔案,列出其不同之處。它對給出的檔案進行系統的檢查,並顯示出兩個檔案中所有不同的行,不要求事先對檔案進行排序。

2>語法

diff [options] file1 file2

該命令告訴使用者,為了使兩個檔案file1和file2一致,需要修改它們的哪些行。如果用」-」表示file1或file2,則表示標準輸入。如果file1或file2是目錄,那麼diff將使用該目錄中的同名檔案進行比較。

3>[options]主要引數

-a:將所有檔案當作文字檔案來處理。

-b或–ignore-space-change  忽略空格造成的不同。

-b或–ignore-blank-lines  忽略空行造成的不同。

-c:使用綱要輸出格式。

-h:利用試探法加速對大檔案的搜尋。

-i:忽略大小寫的變化。

-n –rcs:輸出rcs格式。

-n或–new-file  在比較目錄時,若檔案a僅出現在某個目錄中,會顯示:only in目錄;檔案a若使用-n引數,則diff會將檔案a與乙個空白的檔案比較。

-r或–recursive  比較子目錄中的檔案。

-u,-u《列數》或–unified=《列數》  以合併的方式來顯示檔案內容的不同。

4>使用方法的例項說明

例如: diff /usr/xu mine

把目錄/usr/xu 中名為mine的檔案與當前目錄中的mine檔案進行比較。

通常輸出由下述形式的行組成:

n1 a n3,n4

n1,n2 d n3

n1,n2 c n3,n4 這些行類似ed命令把filel轉換成file2。字母(a、d和c)之前的行號(n1,n2)是針對file1的,其後面的行號(n3,n4)是針對file2的。字母a、d和c分別表示附加、刪除和修改操作。

在上述形式的每一行的後面跟隨受到影響的若干行,以」<」打頭的行屬於第乙個檔案,以」>」打頭的行屬於第二個檔案。

diff能區別塊和字元裝置檔案以及fifo(管道檔案),不會把它們與普通檔案進行比較。

如果file1和file2都是目錄,則diff會產生很多資訊。

5>diff最常用的功能

diff有很多功能平時我們不常用到,最常用的功能莫過於生成patch檔案了:

diff -urn old/ new/ > mysoft.patch

引數 -u 表示使用 unified 格式,-r 表示比較目錄,-n 表示將不存在的檔案當作空檔案處理,這樣新新增的檔案也會出現在patch檔案中。

然後在需要應用patch的地方使用下述命令即可:

patch -p0 < mysoft.patch

diff的 -y 命令(長格式為 –side-by-side)可以將螢幕分成左右兩部分,來比較兩個檔案之間的差異。許多圖形化的比較工具都有這個功能,但如果只能使用命令列,這個引數 就相當有用了。如果要改變左右各部分的寬度,可以通過 -w (–width)引數來指定。

–ignore-blank-lines 引數可以不檢查空白行。這樣dos格式和unix格式的檔案互相比較時,就不至於因為換行符不一致而出現大量的差異。

二、二進位制檔案比較命令cmp

用途比較兩個檔案的內容並報告不同的第乙個字元。

語法cmp [ -l | -s ] file1 file2

描述cmp 命令比較 file1 和 file2 引數指定的檔案,並將結果寫到標準輸出。如果為 file1 或 file2 引數指定 -(減號),則 cmp 命令讀取該檔案的標準輸入。只可以從標準輸入讀取乙個檔案。在預設條件下,如果檔案相同,則 cmp 命令不顯示任何內容。如果它們不同,則 cmp 命令顯示發生不同的第乙個位元組數和行數。如果指定了 -l 標誌,並且如果乙個檔案是另一檔案的初始後繼(即,如果在查詢任何差別之前,cmp 命令讀取檔案中的檔案結束符),則 cmp 命令記下它。通常,使用 cmp 命令比較非文字檔案,使用 diff 命令比較文字檔案。

標誌-l     對於每個不同,(小寫字母 l)顯示十進位制的位元組數和八進位制的不同位元組。

-s     只返回退出值。值 0 指示相同的檔案;值 1 指示不同的檔案;值 2 指示不可訪問的檔案或缺少選項。

退出狀態

該命令返回以下退出值:

0     檔案相同。

1     檔案不同。即使乙個檔案是另乙個檔案的初始後繼(乙個檔案與另乙個檔案的第乙個部分相同),也給出該值。

>1     發生錯誤。

示例1. 要確定兩個檔案是否相同,請輸入:

cmp prog.o.bak prog.o

這比較 prog.o.bak 和 prog.o。如果檔案相同,則不顯示訊息。如果檔案不同,則顯示第乙個不同的位置;例如:

prog.o.bak prog.o differ: char 4, line 1

如果顯示訊息 cmp: eof on prog.o.bak,則 prog.o 的第一部分與 prog.o.bak 相同,但在 prog.o 中還有其他資料。

2. 要顯示不同位元組的每個對,請輸入:

cmp -l prog.o.bak prog.o

這比較檔案,然後顯示位元組數(使用十進位制格式)和每個不同的不同位元組(使用八進位制格式)。例如,如果第五個位元組在 prog.o.bak 中是八進位制 101,在 prog.o 中是 141,則 cmp 命令顯示:

5 101 141

3. 要比較兩個檔案,而不寫任何訊息,請輸入:

cmp -s prog.c.bak prog.c

這樣,如果檔案相同,則給出值 0,如果不同,則給出值 1,或者如果發生錯誤,則給出值 2。該命令形式通常用在 shell 步驟中。例如:

if cmp -s prog.c.bak prog.c

then

echo no change

fi如果兩個檔案相同,則該部分的 shell 步驟顯示 no change。

Linux文字比較命令 diff

diff 命令 diff 命令是 linux上非常重要的工具,用於比較檔案的內容,特別是比較兩個版本不同的檔案以找到改動的地方。diff在命令列中列印每乙個行的改動。最新版本的diff還支援二進位制檔案。diff程式的輸出被稱為補丁 patch 因為linux系統中還有乙個patch程式,可以根據d...

Linux文字比較命令 diff

diff 命令 diff 命令是 linux上非常重要的工具,用於比較檔案的內容,特別是比較兩個版本不同的檔案以找到改動的地方。diff在命令列中列印每乙個行的改動。最新版本的diff還支援二進位制檔案。diff程式的輸出被稱為補丁 patch 因為linux系統中還有乙個patch程式,可以根據d...

Linux文字比較命令 diff

diff 命令是 linux上非常重要的工具,用於比較檔案的內容,特別是比較兩個版本不同的檔案以找到改動的地方。diff在命令列中列印每乙個行的改動。最新版本的diff還支援二進位制檔案。diff程式的輸出被稱為補丁 patch 因為linux系統中還有乙個patch程式,可以根據diff的輸出將a...