每天一個linux命令(36):diff 命令

diff?命令是?linux上非常重要的工具,用于比較文件的內容,特別是比較兩個版本不同的文件以找到改動的地方。diff在命令行中打印每一個行的改動。最新版本的diff還支持二進制文件。diff程序的輸出被稱為補丁?(patch),因為Linux系統中還有一個patch程序,可以根據diff的輸出將a.c的文件內容更新為b.c。diff是svn、cvs、git等版本控制工具不可或缺的一部分。

1.命令格式:

diff[參數][文件1或目錄1][文件2或目錄2]

2.命令功能:

diff命令能比較單個文件或者目錄內容。如果指定比較的是文件,則只有當輸入為文本文件時才有效。以逐行的方式,比較文本文件的異同處。如果指定比較的是目錄的的時候,diff?命令會比較兩個目錄下名字相同的文本文件。列出不同的二進制文件、公共子目錄和只在一個目錄出現的文件。

?

3.命令參數:

-? 指定要顯示多少行的文本。此參數必須與-c或-u參數一并使用。

 -a或--text? diff預設只會逐行比較文本文件。

-b或--ignore-space-change? 不檢查空格字符的不同。

-B或--ignore-blank-lines? 不檢查空白行。

-c? 顯示全部內文,并標出不同之處。

-C或--context? 與執行"-c-"指令相同。

-d或--minimal? 使用不同的演算法,以較小的單位來做比較。

-D或ifdef? 此參數的輸出格式可用于前置處理器巨集。

-e或--ed? 此參數的輸出格式可用于ed的script文件。

-f或-forward-ed? 輸出的格式類似ed的script文件,但按照原來文件的順序來顯示不同處。

-H或--speed-large-files? 比較大文件時,可加快速度。

-l或--ignore-matching-lines? 若兩個文件在某幾行有所不同,而這幾行同時都包含了選項中指定的字符或字符串,則不顯示這兩個文件的差異。

-i或--ignore-case? 不檢查大小寫的不同。

-l或--paginate? 將結果交由pr程序來分頁。

-n或--rcs? 將比較結果以RCS的格式來顯示。

-N或--new-file? 在比較目錄時,若文件A僅出現在某個目錄中,預設會顯示:Only?in目錄:文件A若使用-N參數,則diff會將文件A與一個空白的文件比較。

-p? 若比較的文件為C語言的程序碼文件時,顯示差異所在的函數名稱。

-P或--unidirectional-new-file? 與-N類似,但只有當第二個目錄包含了一個第一個目錄所沒有的文件時,才會將這個文件與空白的文件做比較。

-q或--brief? 僅顯示有無差異,不顯示詳細的信息。

-r或--recursive? 比較子目錄中的文件。

-s或--report-identical-files? 若沒有發現任何差異,仍然顯示信息。

-S或--starting-file? 在比較目錄時,從指定的文件開始比較。

-t或--expand-tabs? 在輸出時,將tab字符展開。

-T或--initial-tab? 在每行前面加上tab字符以便對齊。

-u,-U或--unified=? 以合并的方式來顯示文件內容的不同。

-v或--version? 顯示版本信息。

-w或--ignore-all-space? 忽略全部的空格字符。

-W或--width? 在使用-y參數時,指定欄寬。

-x或--exclude? 不比較選項中所指定的文件或目錄。

-X或--exclude-from? 您可以將文件或目錄類型存成文本文件,然后在=中指定此文本文件。

-y或--side-by-side? 以并列的方式顯示文件的異同之處。

--help? 顯示幫助。

--left-column? 在使用-y參數時,若兩個文件某一行內容相同,則僅在左側的欄位顯示該行內容。

--suppress-common-lines? 在使用-y參數時,僅顯示不同之處。

?

4.使用實例:

?

實例1:比較兩個文件

命令:

輸出:

[root@localhost?test3]#?diff?log2014.log?log2013.log?

3c3

<?2014-03

---

>?2013-03

8c8

<?2013-07

---

>?2013-08

11,12d10

<?2013-11

<?2013-12

?

說明:

上面的“3c3”和“8c8”表示log2014.log和log20143log文件在3行和第8行內容有所不同;"11,12d10"表示第一個文件比第二個文件多了第11和12行。

diff?normal?顯示格式有三種提示:

a?-?add

c?-?change

d?-?delete?

?

實例2:并排格式輸出

命令:

diff?log2013.log?log2014.log??-y?-W?50

輸出:

[root@localhost?test3]#?diff?log2014.log?log2013.log??-y?-W?50

2013-01?????????????????2013-01

2013-02?????????????????2013-02

2014-03???????????????|?2013-03

2013-04?????????????????2013-04

2013-05?????????????????2013-05

2013-06?????????????????2013-06

2013-07?????????????????2013-07

2013-07???????????????|?2013-08

2013-09?????????????????2013-09

2013-10?????????????????2013-10

2013-11???????????????<

2013-12???????????????<

[root@localhost?test3]#?diff?log2013.log?log2014.log??-y?-W?50

2013-01?????????????????2013-01

2013-02?????????????????2013-02

2013-03???????????????|?2014-03

2013-04?????????????????2013-04

2013-05?????????????????2013-05

2013-06?????????????????2013-06

2013-07?????????????????2013-07

2013-08???????????????|?2013-07

2013-09?????????????????2013-09

2013-10?????????????????2013-10

??????????????????????>?2013-11

??????????????????????>?2013-12

?

說明:

“|”表示前后2個文件內容有不同

<”表示后面文件比前面文件少了1行內容

>”表示后面文件比前面文件多了1行內容

?

實例3:上下文輸出格式

命令:

diff?log2013.log?log2014.log??-c

輸出:

[root@localhost?test3]#?diff?log2013.log?log2014.log??-c

***?log2013.log?2012-12-07?16:36:26.000000000?+0800

---?log2014.log?2012-12-07?18:01:54.000000000?+0800

***************

***?1,10?****

??2013-01

??2013-02

!?2013-03

??2013-04

??2013-05

??2013-06

??2013-07

!?2013-08

??2013-09

??2013-10

---?1,12?----

??2013-01

??2013-02

!?2014-03

??2013-04

??2013-05

??2013-06

??2013-07

!?2013-07

??2013-09

??2013-10

+?2013-11

+?2013-12[root@localhost?test3]#?diff?log2014.log?log2013.log??-c

***?log2014.log?2012-12-07?18:01:54.000000000?+0800

---?log2013.log?2012-12-07?16:36:26.000000000?+0800

***************

***?1,12?****

??2013-01

??2013-02

!?2014-03

??2013-04

??2013-05

??2013-06

??2013-07

!?2013-07

??2013-09

??2013-10

-?2013-11

-?2013-12

---?1,10?----

??2013-01

??2013-02

!?2013-03

??2013-04

??2013-05

??2013-06

??2013-07

!?2013-08

??2013-09

??2013-10[root@localhost?test3]#

?

說明:

這種方式在開頭兩行作了比較文件的說明,這里有三中特殊字符:

“+”?比較的文件的后者比前著多一行

“-”?比較的文件的后者比前著少一行

“!”?比較的文件兩者有差別的行

?

實例4:統一格式輸出

命令:

diff?log2014.log?log2013.log??-u

輸出:

[root@localhost?test3]#?diff?log2014.log?log2013.log??-u

---?log2014.log?2012-12-07?18:01:54.000000000?+0800

+++?log2013.log?2012-12-07?16:36:26.000000000?+0800

@@?-1,12?+1,10?@@

?2013-01

?2013-02

-2014-03

+2013-03

?2013-04

?2013-05

?2013-06

?2013-07

-2013-07

+2013-08

?2013-09

?2013-10

-2013-11

-2013-12

?

說明:

它的第一部分,也是文件的基本信息:

---?log2014.log?2012-12-07?18:01:54.000000000?+0800

+++?log2013.log?2012-12-07?16:36:26.000000000?+0800

"---"表示變動前的文件,"+++"表示變動后的文件。

第二部分,變動的位置用兩個@作為起首和結束。

  @@?-1,12?+1,10?@@

前面的"-1,12"分成三個部分:減號表示第一個文件(即log2014.log),"1"表示第1行,"12"表示連續12行。合在一起,就表示下面是第一個文件從第1行開始的連續12行。同樣的,"+1,10"表示變動后,成為第二個文件從第1行開始的連續10行。

?

實例5:比較文件夾不同

命令:

diff??test3?test6

輸出:

[root@localhost?test]#?diff?test3?test6

Only?in?test6:?linklog.log

Only?in?test6:?log2012.log

diff?test3/log2013.log?test6/log2013.log

1,10c1,3

<?2013-01

<?2013-02

<?2013-03

<?2013-04

<?2013-05

<?2013-06

<?2013-07

<?2013-08

<?2013-09

<?2013-10

---

>?hostnamebaidu=baidu.com

>?hostnamesina=sina.com

>?hostnames=true

diff?test3/log2014.log?test6/log2014.log

1,12d0

<?2013-01

<?2013-02

<?2014-03

<?2013-04

<?2013-05

<?2013-06

<?2013-07

<?2013-07

<?2013-09

<?2013-10

<?2013-11

<?2013-12

Only?in?test6:?log2015.log

Only?in?test6:?log2016.log

Only?in?test6:?log2017.log

[root@localhost?test]#?

說明:

?

實例6:比較兩個文件不同,并生產補丁

命令:

diff?-ruN?log2013.log?log2014.log?>patch.log

輸出:

[root@localhost?test3]#?diff?-ruN?log2013.log?log2014.log?>patch.log

[root@localhost?test3]#?ll

總計?12

-rw-r--r--?2?root?root??80?12-07?16:36?log2013.log

-rw-r--r--?1?root?root??96?12-07?18:01?log2014.log

-rw-r--r--?1?root?root?248?12-07?21:33?patch.log

[root@localhost?test3]#?cat?patc.log

cat:?patc.log:?沒有那個文件或目錄

[root@localhost?test3]#?cat?patch.log?

---?log2013.log?2012-12-07?16:36:26.000000000?+0800

+++?log2014.log?2012-12-07?18:01:54.000000000?+0800

@@?-1,10?+1,12?@@

?2013-01

?2013-02

-2013-03

+2014-03

?2013-04

?2013-05

?2013-06

?2013-07

-2013-08

+2013-07

?2013-09

?2013-10

+2013-11

+2013-12[root@localhost?test3]#

說明:

?

實例7:打補丁

命令:

輸出:

[root@localhost?test3]#?cat?log2013.log

2013-01

2013-02

2013-03

2013-04

2013-05

2013-06

2013-07

2013-08

2013-09

2013-10[root@localhost?test3]#?patch?log2013.log?patch.log?

patching?file?log2013.log

[root@localhost?test3]#?

[root@localhost?test3]#?cat?log2013.log?

2013-01

2013-02

2014-03

2013-04

2013-05

2013-06

2013-07

2013-07

2013-09

2013-10

2013-11

2013-12[root@localhost?test3]#

說明:

轉載于:https://www.cnblogs.com/gophper/p/4942013.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375407.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375407.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375407.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

移動conda文件夾

mv /root/anaconda3 /home/root/需要修改的文件有 ~/.bash/home/root/anaconda3/etc/profile.d/conda.sh/home/root/anaconda3/bin/conda 第一行

replace 替換全部的正確姿勢

本文同步自我的個人博客&#xff1a;http://www.52cik.com/2015/11/06/replace-all.html 關于字符串替換問題&#xff0c;其實是個很簡單的問題&#xff0c;但卻也不那么簡單&#xff0c;至少對于很多新手而言&#xff0c;全局替換一直是個坑。 簡單而強大的正則 可能你覺得要替…

JAVA - 單例設計模式

JAVA - 單例設計模式 一. 簡介二. 單例模式的原則三. 單例模式的實現1.1 餓漢式1.1.1 靜態變量初始化方式1.1.2 靜態代碼塊初始化方式1.1.3 枚舉方式 1.2 懶漢式1.2.1 懶加載初始化方法 &#xff08;線程不安全&#xff09;1.2.2 懶加載初始化方法 &#xff08;線程安全&#x…

http請求報文

關于urlURL 是大型標識符 URI(統一資源標識)的一部分。這個超集是建立在已有的命名慣例基礎上的。一個 URL 是一個簡單的 URI,使用已存在的協議或規劃(也就是 http,ftp 等)作為地址的一部分。為了進一步描繪這些,我們將會Edit By Vheavens Edit By Vheavens 引入 non-URL 的 UR…

operanbsp;內容攔截

結束我大opera的一個好用功能 內容攔截 博客的主要很清爽,也可以自定義.非常好, 但打開博文,左邊的特別的精彩圖文,瞄到就不高興.好的 開始 右鍵-內容攔截 shift 點那個精彩xx,最右上角,廣告, 然后點完成.ok了 貌似我大遨游的廣告攔截更好用 轉載于:https://www.cnblogs.com/wa…

Solr-5.3.1安裝配置

Solr-5.3.1安裝配置官方網站:http://lucene.apache.org/solr/http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htmlhttp://lucene.apache.org/solr/quickstart.html環境:CentOS6 x64Solr-5.3.1從Solr5.0開始&#xff0c;Solr不再發布為在任何…

EF for Firebird

今天用了Firebird&#xff0c;記錄下怎么用&#xff0c;不然下次給忘記了 1.官網下載包 1.DDEXProvider-3.0.1.0.msi 2.FirebirdSql.Data.FirebirdClient-4.6.2.0.msi 備注&#xff1a; 1.發現DDEXProvider 與 FirebirdSql.Data.FirebirdClient安裝有先后順序 1.如果中間出現了…

php幾個函數

1. dirname (PHP 3, PHP 4, PHP 5) dirname -- 返回路徑中的目錄部分說明 string dirname ( string path )給出一個包含有指向一個文件的全路徑的字符串&#xff0c;本函數返回去掉文件名后的目錄名。 在 Windows 中&#xff0c;斜線&#xff08;/&#xff09;和反斜線&#xf…

Struts2 自定義攔截器(easy example)

要自定義攔截器需要實現com.opensymphony.xwork2.interceptor.Interceptor接口&#xff1a; 新建一個MyInterceptpackage com.action;import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor;public class MyInterceptor i…

img標簽在div里上下居中

方法一&#xff1a;圖片尺寸未知&#xff0c;IE8-不支持 CSS部分&#xff1a; <style> .content{width:500px;height:500px;border:1px solid black;position:relative; } </style>DOM部分&#xff1a; <div class"content"> <img src"htt…

(接口)銀聯證書上傳被修改的問題和讀取證書的絕對路徑問題

最近在做對接銀聯的支付接口。相對于支付寶、微信支付&#xff0c;銀聯支付接口應該是做的最完美的了。銀聯支付平臺提供了足夠詳細的接口文檔&#xff0c;接口demo&#xff0c;常見問題解決方案。 更人性化的是&#xff0c;個人可以免費注冊一個商家賬號&#xff0c;提供給你免…

控制器對視圖聲明周期的控制

init&#xff0d;初始化程序 viewDidLoad&#xff0d;加載視圖 viewWillAppear&#xff0d;UIViewController對象的視圖即將加入窗口時調用&#xff1b; viewDidApper&#xff0d;UIViewController對象的視圖已經加入到窗口時調用&#xff1b; viewWillDisappear&#xff0d;UI…

MST:Bad Cowtractors(POJ 2377)

壞的牛圈建筑 題目大意&#xff1a;就是現在農夫又要牛修建牛欄了&#xff0c;但是農夫想不給錢&#xff0c;于是牛就想設計一個最大的花費的牛圈給他&#xff0c;牛圈的修理費用主要是用在連接牛圈上 這一題很簡單了&#xff0c;就是找最大生成樹&#xff0c;把Kruskal算法改一…

有關進程的一些基本概念

對進程的初步描述 一.和進程有關的一些概念 ①一個進程就是一個正在執行程序的實例&#xff0c;包括程序計數器&#xff0c;寄存器和變量的當前值。 從概念上說&#xff0c;每個進程擁有它自己的虛擬CPU&#xff0c;當然真實的CPU在各個進程之間來回切換。 ②在某一瞬間&…

第4章 maven依賴特性

第4章 maven依賴特性 本章詳細介紹maven的依賴特性和依賴范圍&#xff0c;如何排除依賴。 4.1 什么是依賴傳遞 舉個例子 在非maven項目中&#xff0c;你需要使用spring功能&#xff0c;你會想到導入spring的jar包&#xff0c;那么&#xff0c;srping又需要其他依賴jar包支持&a…

lintcode :Integer to Roman 整數轉羅馬數字

題目 整數轉羅馬數字 給定一個整數&#xff0c;將其轉換成羅馬數字。 返回的結果要求在1-3999的范圍內。 樣例 4 -> IV 12 -> XII 21 -> XXI 99 -> XCIX 更多案例&#xff0c;請戳 http://literacy.kent.edu/Minigrants/Cinci/romanchart.htm 說明 什么是 羅馬數字…

Win32ASm學習[1]:RadASm下測試Debug

okay 正文開始下面的代碼如果不能編譯 請把你的RadAsm下的Masm32這個文件夾復制到任意一個磁盤的根目錄下&#xff0c;在進行編譯就可以了 或者安裝Masm32 SDK到任意磁盤根目錄下 .386.model flat,stdcalloption casemap:none;>>>>>>>>>>&g…

關于javascript閉包

1.閉包的概念 閉包就是能夠讀取其他函數內部變量的函數。 由于在Javascript語言中&#xff0c;只有函數內部的子函數才能讀取局部變量&#xff0c;因此可以把閉包簡單理解成“定義在一個函數內部的函數”。 所以&#xff0c;在本質上&#xff0c;閉包就是將函數內部和函數外部連…

Win32ASM學習[2]:運算符

算術運算符 名稱 優先級 () 圓括號 1 ,- 正、負 2 *,/ 乘、除 3 MOD 取模 3 ,- 加、減 4 ------------------------------------------------------------------------------------------------------------------------------------------ .386 .mo…