linux 命令-文本比較comm、diff、patch

本文原創首發於公衆號:編程三分鐘git

今天學了三個文本比較的命令分享給你們。編程

comm

comm 命令比較相同的文本spa

$ cat char
a
b
c
$ cat chardiff
a
d
c複製代碼

好比,我有兩個文件charchardiff如上,略有不一樣,就能夠用這個命令輸出。code

$ comm char chardiff
        a
b
c
    d
    c複製代碼

如上,看起來輸出的亂七八糟,他只是把兩個文件按列把各自特有的輸出,最後再輸出共有的。因此參數-1表明不輸出第1列,也就是第2列和第3列。-2輸出第1列和第3列,-3輸出第一、2列的。參數比較廢,看起來很費勁。cdn

$ comm -1 char chardiff
    a
d
c
$ comm -12 char chardiff
a複製代碼

comm命令比較笨,只能針對已經排序過的數據,若是沒有排序過,像abcacb就會識別成僅僅a相同,暫時沒想到比較好的使用場景。排序

diff

用到git的都知道git diff有多好用,雖然不如可視化頁面直觀,意在快速便捷。下面是一個例子,char文件內容是abcchardiff2內容是bcdip

$ diff -c char chardiff2
*** char    2019-09-16 21:40:47.000000000 +0800
--- chardiff2    2019-09-17 00:38:52.000000000 +0800
***************
*** 1,3 ****
- a
  b
  c
--- 1,3 ----
  b
  c
+ d複製代碼

直接加了-c參數是爲了更直觀,感興趣能夠本身嘗試去掉-c看看是什麼效果。*** 1,3 ****--- 1,3 ----表明1到3行,-表明刪除行,+表明增長行,!表明更改行。diff不只能夠臨時對比兩個文件之間的差別,可是和下一個命令組合起來纔是其真正的用處。it

patch 補丁

一般在更新幾百萬行的項目時,若是隻有幾行有變化,所有打包過來根本是不可能的,由於它太大了,並且所有拷過來也沒有意義,最大的問題是人力難以對比。在這以前咱們須要生成一個補丁文件io

$ diff -Naur folder1 folder2 > diff_file
$ ls folder1
char chardiff
$ ls folder2
char chardiff ip複製代碼

獲得補丁文件diff_file以後,發到與foler1版本如出一轍的位置就能夠更新成功了!class

$ cd folder1
$ patch < diff_file
$ patch < diff_file
patching file chardiff
patching file ip複製代碼

若是要回滾就加-R參數

$ patch -R < diff_file
patching file chardiff
patching file ip複製代碼

它的參數以下-p num :忽略幾層文件夾-E :若是發現了空文件,那麼就刪除它-R :取消打過的補丁

image.png

相關文章
相關標籤/搜索