我們在平時工作的時候,經常要知道兩個檔案之間,以及同個檔案不同版本之間有何異同點。在 windows 下,有 beyond compare 這個好用的工具,而在 linux 下,也有很多很強大的工具,良許之前也寫過一篇文章介紹:
linux下9種優秀的**比對工具推薦
這些比對工具其實都是基於diff
命令,下面就詳細介紹一些 diff 命令的用法。
diff命令是乙個分析檔案資訊的命令,可以列印出檔案之間的差異。它可以逐行地比較兩個檔案的內容,也可以遞迴地比較資料夾的內容。diff命令的輸出內容可以讓我們知道要使兩個檔案相同需要做哪些修改,這對於我們的工作很有幫助。
在開始前,我們先用檔案編輯器建立兩個內容相同的檔案。這裡我們使用的是nano。
$ nano diffsample1
輸入內容:
發布優質的技術文章
使用
ctrl
+x
和y
儲存並退出。建立第二個檔案:
輸入同樣的內容並儲存退出。$ nano diffsample2
需要注意的是,空格和
tab
對兩個檔案是否完全相同會有影響。使用diff命令檢視兩個檔案是否有差異:
這時diff命令沒有輸出任何資訊,說明這兩個檔案的內容是完全相同的。$ diff diffsample1 diffsample2
現在我們對 diffsample2 做一些修改,將文章改為帖子然後儲存並退出
再使用diff命令:
檢視輸出的資訊:$ diff diffsample1 diffsample2
在以上輸出資訊中,3c3表示第乙個檔案的第三行需要被替換為第二個檔案的第三行,然後為我們提示出了需要修改的內容:技術文章和技術帖子
c: 表示必須做一些修改
a: 表示必須新增一些內容
d: 表示必須刪除一些內容
字元前的數字表示第乙個檔案中的行數,字元後的內容表示第二個檔案中的行數。
<表示引用的第乙個檔案中的內容,而>表示引用的第乙個檔案中的內容
現在讓我們交換兩個檔案的順序再試試:
在交換檔案順序之後diff參考的檔案變成了 diffsample1,提示我們將技術帖子修改為技術文章。
刪除了第二行和第三行,再試試使用diff命令
現在我們可以看到,因為我們以 diffsample1 作為參考,為了使兩個檔案相同,我們需要刪除 diffsample2 中的第二行和第三行,然後就會和 diffsample1 中的第一行內容相同。
我們再試試交換 diffsample1 和 diffsample2 的順序:
可以看到,現在diff給我們的提示資訊變為了在 diffsample1 中的第一行後面新增 diffsample2 中的第二行和第三行內容。$ diff diffsample1 diffsample2
現在讓我們來測試區分內容的大小寫:
兩個檔案中唯一的區別是第三行的大小寫,再試試diff命令
可以看到diff命令找出了大小寫的不同,如果我們不想檢查大小寫,可以使用-i選項。
這時內容沒有區別,diff沒有輸出任何資訊。$ diff -i diffsample1 diffsample2
我們可以使用-u選項以統一的格式輸出資訊:
輸出資訊中使用-和+表示哪些內容需要被刪除或者新增來使得檔案內容相同。
之前提到過diff命令會檢查空格或tab,如果我們想要忽略空格和tab,可以使用-w選項。
在 diffsample2 的第二行 good 後面輸入一些空格和tab,並把之前的大寫改回小寫。
再使用diff命令
可以看到找出了不同,再使用-w忽略空格和tab,這時便沒有任何輸出資訊了。
diff和patch給原始碼做補丁
如果想要對兩個目錄下的所有檔案做diff,可以使用以下命令 diff burn org src dir target src dir patch file 其中 b可以忽略所有的空白行,r對所有的子目錄進行遞迴的操作。org src dir 是未經修改前的源檔案目錄,target src dir 是...
diff和patch給原始碼做補丁
如果想要對兩個目錄下的所有檔案做diff,可以使用以下命令 diff burn org src dir target src dir patch file 其中 b可以忽略所有的空白行,r對所有的子目錄進行遞迴的操作。org src dir 是未經修改前的源檔案目錄,target src dir 是...
linux下Diff命令使用方法
1 diff命令的功能 linux中diff命令的功能為逐行比較兩個文字檔案,列出其不同之處。它對給出的檔案進行系統的檢查,並顯示出兩個檔案中所有不同的行,不要求事先對檔案進行排序。2 語法 diff options file1 file2 該命令告訴使用者,為了使兩個檔案file1和file2一致...