linux文件行對比命令 linux 對比文件

Linux命令diff、patch

背景

我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、鎮(zhèn)遠(yuǎn)ssl等。為近千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的鎮(zhèn)遠(yuǎn)網(wǎng)站制作公司

在Linux系統(tǒng)環(huán)境的工作過程中,經(jīng)常遇到需要對比文件差異的情況,此時,使用Linux提供的diff工具可以方便的發(fā)現(xiàn)文件不同版本之間差異,從而快速排除解決問題。

Windows端有強(qiáng)大文件對比工具BeyondCompare。

patch 命令可以將diff命令的輸出應(yīng)用到原始的對比文件中,將新版本的更新應(yīng)用到原始的文件中。

命令

diff [option] [file1] [file2]

patch [option] [file1] [file_differ]

測試環(huán)境

WSL: Linux PERSONALPC 4.4.0-19041-Microsoft #488-Microsoft Mon Sep 01 13:43:00 PST 2020 x86_64 x86_64 x86_64 GNU/Linux

測試過程

linux只比較文件前20行

如果你想比較兩個文件前 20 行的內(nèi)容,可以使用 Linux 命令 head。例如,如果你要比較文件 file1 和 file2 的前 20 行,可以使用以下命令:

head -n 20 file1 file2

如果你只想查看文件的前 20 行而不進(jìn)行比較,可以使用以下命令:

head -n 20 file1

Linux文件比較命令的diff命令

該命令的功能為逐行比較兩個文本文件,列出其不同之處。它比comm命令完成更復(fù)雜的檢查。它對給出的文件進(jìn)行系統(tǒng)的檢查,并顯示出兩個文件中所有不同的行,不要求事先對文件進(jìn)行排序。

語法:diff [選項(xiàng)] file1 file2

說明:該命令告訴用戶,為了使兩個文件file1和file2一致,需要修改它們的哪些行。如果用“- ”表示file1或fiie2,則表示標(biāo)準(zhǔn)輸入。如果file1或file2是目錄,那么diff將使用該目錄中的同名文件進(jìn)行比較。

例如: diff /usr/xu mine

把目錄/usr/xu 中名為mine的文件與當(dāng)前目錄中的mine文件進(jìn)行比較。

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

n1 a n3,n4

n1,n2 d n3

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

在上述形式的每一行的后面跟隨受到影響的若干行,以“”打頭的行屬于第一個文件,以“”打頭的行屬于第二個文件。

diff能區(qū)別塊和字符設(shè)備文件以及FIFO(管道文件),不會把它們與普通文件進(jìn)行比較。

如果file1和file2都是目錄,則diff會產(chǎn)生很多信息。

如果一個目錄中只有一個文件,則產(chǎn)生一條信息,指出該目錄路徑名和其中的文件名。

diff各選項(xiàng)的含義如下:

- b 忽略行尾的空格,而字符串中的一個或多個空格符都視為相等。

如How are you與How are you被視為相同的字符串。

- c 采用上下文輸出格式(提供三行上下文)。

- C n 采用上下文輸出格式(提供n行上下文)。

- e 產(chǎn)生一個合法的ed腳本作為輸出。

- r 當(dāng)file1和file2是目錄時,遞歸作用到各文件和目錄上。

例如,文件ml.c的內(nèi)容為(左邊行號是有意加上的,以便前后對照):

1 main( )

{

printf(“Hello!\n”);

}

5 文件m2.c的內(nèi)容為:

1 main()

2 {

3 int n , m ;

4 n= 10 ;

5 printf ( “ % d \\\\ n ” , m = n * 10);

6 }

輸入命令:

$ diff m1.c m2.c

屏幕上顯示:

3,5 c 3,6

printf(“Hello!\n”);

}

5

3

int n,m;

4 n=10 ;

5 printf ( “ % d \\\\ n ” , m = n * 10);

6 }

表示把文件m1.c的3至5行改成m2.c的3至6行后,兩個文件相同。

Linux文件比較命令的Comm命令

如果想對兩個有序的文件進(jìn)行比較,可以使用comm命令。

語法:comm [- 123 ] file1 file2

說明:該命令是對兩個已經(jīng)排好序的文件進(jìn)行比較。其中file1和file2是已排序的文件。comm讀取這兩個文件,然后生成三列輸出:僅在file1中出現(xiàn)的行;僅在file2中出現(xiàn)的行;在兩個文件中都存在的行。如果文件名用“- ”,則表示從標(biāo)準(zhǔn)輸入讀取。

comm -1 不顯示只出現(xiàn)在第一個文件的行。

comm -2 不顯示只出現(xiàn)在第二個文件的行。

comm -3 不顯示同時出現(xiàn)在兩個文件的行。

comm file1 file2 顯示三列,第一列代表只出現(xiàn)在file1的行,第二列代表只出現(xiàn)在file2的行,第三列代表倆個文件同時出現(xiàn)的行

comm -12 顯示兩個文件同時出現(xiàn)的行 也就是交集

comm -13 顯示只出現(xiàn)在第二個文件的行

comm -23 顯示只出現(xiàn)在第一個文件的行

例如:假設(shè)要對文件myfile1和myfile2進(jìn)行比較

$ cat myfile1

main( )

{

float a,b, i, j ,z ;

a=i=10 ; b=j=5 ;

z= i + j ;

printf(“z=%d\\\\n”,z) ;

}

$ cat myfile2

#include stdio.h

main( )

{

float i, j ,z ;

i=10 ; j=5 ;

z= i + j ;

printf(“z=%f\\\\n”,z) ;

}

$ comm - 12 myfile1 myfile2

main( )

{

z= i + j ;

}

就只顯示文件myfile1和myfile2中共有的行。

網(wǎng)站標(biāo)題:linux文件行對比命令 linux 對比文件
分享路徑:http://www.muchs.cn/article28/dohsocp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、、自適應(yīng)網(wǎng)站、網(wǎng)站設(shè)計(jì)公司、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站