天天看點

【一天一個shell指令】文本操作系列-diff

這又是一個檔案比較指令,熟練掌握會節省你很多工作。還記得comm指令嗎?diff比他更加複雜,好用,不僅能比較檔案,還能比較目錄。 當一個檔案有多個版本時候,或者更多複雜的檔案,目錄比較時,你會期望有一個比comm更有用的指令,diff正是為此而生。 

全稱:different file 

執行個體:

檔案1: v1.txt

 hello

 world v1_echo 

 v1_diff

 v1_comm 

shell is easy!

檔案2: v2.txt

hello world! 

v2_echo

 easy shell! 

 1.普通比較:

$diff v1.txt v2.txt  

 1,2c1,2 

< hello world 

< v1_echo 

--- 

> hello world! 

> v2_echo 

4c4 

< v1_comm 

> easy shell!

列出比較的差別,數字為行數,c是compare

2.一體化輸出: 

$diff -u v1.txt v2.txt > version.patch 

-v1_echo 

+hello world! 

+v2_echo 

v1_diff 

-v1_comm 

+easy shell! 

"+"表示補充的行,"-"表示删去的行

3. 更新覆寫v1.txt,注意這裡借用了patch

$patch –p1 v1.txt< version.patch 

 4. 比較v1,v2檔案,僅輸出v2的變化

$diff -e v1.txt v2.txt 

 4c 

easy shell! 

1,2c 

v2_echo 

.

5.比較目錄

借用書上一段解釋:

-N 将所有确實的檔案視為空檔案

-a 将所有檔案市委檔案文本

-u 生成一體化輸出

-r 周遊目錄下的所有檔案 

比較兩個目錄下所有文本資訊

$diff –Naur directory1 directory2 

除非你确定這兩個目錄基本相同,不然不推薦這麼用。

6.工作疲勞後,尤其同時做很多事情的時候,會忘了有沒有做過上傳,或者修改某個目錄下的檔案。可以這樣:

$diff v1.txt /${dir} 

直接比較同名檔案,高強度下的工作者相信真有體會。 

解讀下—help

太長,截取少部分解讀一下。

Mandatory arguments to long options are mandatory for short options too. 

--normal                                        output a normal diff (the default) 

-q, --brief                                      report only when files differ 

-s, --report-identical-files               report when two files are the same 

-c, -C NUM, --context[=NUM]   output NUM (default 3) lines of copied context 

-u, -U NUM, --unified[=NUM]     output NUM (default 3) lines of unified context 

-e, --ed                                          output an ed script 

-n, --rcs                                         output an RCS format diff 

-y, --side-by-side                           output in two columns 

FILES 的格式可以是‘FILE1 FILE2’、‘DIR1 DIR2’、‘DIR FILE...’或 

‘FILE... DIR’。 

解讀:

1.-q –s

-q: 隻有兩個不同是,提示“兩個檔案不同”

-s: 兩個檔案相同時,提示“兩個檔案相同”

$diff -qs v1.txt v2.txt

(有點無聊的指令 )

2. –y

按照列的方式輸出,增加了直覺性

 hello world               | hello world! 

v1_echo                    | v2_echo 

v1_diff                       v1_diff 

v1_comm                   | easy shell! 

shell is easy!               shell is easy! 

3. file 後面的格式

可以是1.檔案 檔案  2.目錄與目錄  3.檔案與目錄 4. 目錄與檔案

解釋一下,檔案與目錄的形式,比較的是該目錄下 與 比較檔案同名的檔案比較

如:$ diff v1.txt  diff/

則實際是v1.txt 與 diff/v1.txt的比較。這是個很常用的功能。 

對比comm

就比較檔案而言,comm功能比較簡單,但是也很直覺,友善

而diff 提供了更強大,更複雜的比較方式,還能對比目錄,周遊目錄。

<a href="http://down.51cto.com/data/2361151" target="_blank">附件:http://down.51cto.com/data/2361151</a>

本文轉自 wws5201985 51CTO部落格,原文連結:http://blog.51cto.com/yjplxq/954716,如需轉載請自行聯系原作者