Linux 舉例說明Linux diff 命令

2021-08-27 15:43:17 字數 3084 閱讀 9321

在比較檔案的時候,通常會用基於gui的軟體。很少有人真正會為了這個目的使用命 令行工具。雖然說使用命令列來比較檔案/目錄並不像一件小事兒那樣容易,但是如果你是乙個linux使用者,那麼我想你應該知道如何通過命令列比較檔案, 因為一旦使用了它,你會認為它絕對是乙個快速的方法。

在本篇中,我們將通過一些例項來學習如何使用diff命令。

讓我們通過一些實際的例子理解diff命令。

假設我們有兩個檔案(file1 和 file2):

$ cat file1

hi,hello,

how are you?

i am fine,

thank you.

$ cat file2

hello,

hi,how are you?

i am fine.

你可以看見兩個檔案有些小的不同。現在,讓我們看看diff命令如何找出兩者的不同的。

像這樣執行diff命令:

$ diff file1 file2

1d0< hi,

2a2

> hi,

4,5c4

< i am fine,

< thank you.

---

> i am fine.

你可以看見diff後面跟了兩個檔案的名字作為命令列的引數,並且它在輸出中生成了差異比較。輸出並不容易理解。理由是,這是被計算機使用的而不是為了人類。儘管如此,讓我們一步步解碼輸出:

注意– 在下面的文字中,file1和file2將被當作舊檔案和新檔案。

1d0

< hi,

這裡,1d0這一行意味著舊檔案的第一行應該被刪除(d)以使兩個檔案的第一行同步。舊檔案中需要被刪除的行以'

2a2

> hi,

這裡,2a2行意味著新檔案中的第二行應該加到舊檔案的第二行後。要新增的行顯示在輸出的下一行用'>'標記。

4,5c4

< i am fine,

< thank you.

---> i am fine.

這裡,4,5c4這一行意味著在舊檔案中的4到5行現在已被改變並且需要用新檔案中的第4行代替。新增和刪除的行分別用'>'和'

那麼,來總結一下,

除了檔案外,diff命令還可以比較兩個目錄。讓我們通過乙個例子學習。

這裡是'new_dir'目錄包含的內容:

$ ls new_dir/

file file2 frnd frnd1.cpp log1.txt log3.txt log5.txt

file1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt

這是'origdir'目錄含有的內容:(譯註:原文為and here are the contents of a directory named 『olddir』 ,其中'old_dir'應為筆誤。)

$ ls orig_dir/

file1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt test

file2 frnd frnd1.cpp log1.txt log3.txt log5.txt

下面是diff命令執行後的輸出:

$ diff new_dir/ orig_dir/

only in new_dir/: file

only in orig_dir/: test

你可以看到當diff命令被用來比較這兩個目錄時,很容易就會顯示兩個檔案中缺失的檔案。

下面是一些在命令列下常用的選項:

如果兩個檔案含有相同的文字但是大小寫不同,diff命令仍會預設報告它不同。

比如:

$ cat file1

hi$ cat file2

hi$ diff file1 file2

1c1< hi

---> hi

你可以看見diff命令在輸出中報告了大小寫不同。

要去除這個預設行為,使用-i選項。

以下是個例子:

$ diff -i file1 file2

$

這樣你可以看到沒有生成輸出,這是當兩個檔案相同時的預設行為。

在例子1的後面,我們看到如果檔案相同diff不會生成報告。雖然這個預設行為不錯但是它仍可能會造成很大疑惑,特別對於新手而言。因此,如果你像樣diff命令明確地報告兩個檔案不同,那麼就使用-s命令選項。

來舉個例子:

$ diff -is file1 file2

files file1 and file2 are identical

你可以看到我加了-s選項在後面的例子中,這次diff命令會明確地報告兩個檔案是相同的。

另外乙個常用的是diff報告檔案存在不同數量的空格。

舉例說明:

$ cat file1

hi, how are you?

$ cat file2

hi, how are you?

觀察這兩個檔案唯一的不同是file2中'are'和'you'之間額外的空格。現在,當使用diff命令比較兩個檔案時,輸出如下:

$ diff file1 file2

1c1< hi, how are you?

---> hi, how are you?

因此你可以看到diff命令報告了不同。但是如果你想要忽略這些空格,使用 -b 選項。

$ diff -b file1 file2

$

這樣你可以看到由於-b選項,diff命令報告這兩個檔案是相同的。

diff命令還提供了更多的命令列選項。閱讀man page來獲取完整的列表。

via:

譯者:geekpi 校對:caroline

原文由 lctt 原創翻譯,linux中國 榮譽推出

sprintf舉例說明

最近需要把圖形的座標轉換為字元來檢驗圖形座標的正確與否,所以較多的用到了sprintf 函式。例如 int sign 100 char s1 10 sprintf s1,d sign pdc textout 0,0,s1 這裡就把sprintf 函式的用法總結一下。int sprintf char ...

python argparse舉例說明

目的 想從命令列通過命令來指定是否執行程式中的某個函式 模組 更新關於另乙個例子 這裡只舉例說明 原因是看了很多博文之後,還是沒有解決筆者上面說的那個問題,即如何從命令列決定是否執行某段函式問題 設定乙個引數,名為foreground,簡寫f 即在終端可以輸入 foreground也可以輸入 f。跟...

c 引用 舉例說明

簡介 引用就是某一變數 目標 的乙個別名,對引用的操作與對變數直接操作完全一樣。c 11中新增了 右值引用 我們這裡所說的引用通常指 左值引用 例 int a 10 int rea a rea指向a,是a的另乙個名字 int rerea 錯誤 引用必須被初始化輸出a 和 rea 都是10。需要注意定...