本文原創首發於公衆號:編程三分鐘git
今天學了三個文本比較的命令分享給你們。shell
comm 命令比較相同的文本編程
$ cat char a b c $ cat chardiff a d c
好比,我有兩個文件char
和chardiff
如上,略有不一樣,就能夠用這個命令輸出。code
$ comm char chardiff a b c d c
如上,看起來輸出的亂七八糟,他只是把兩個文件按列把各自特有的輸出,最後再輸出共有的。 因此參數-1
表明不輸出第1列,也就是第2列和第3列。-2
輸出第1列和第3列,-3
輸出第一、2列的。參數比較廢,看起來很費勁。排序
$ comm -1 char chardiff a d c $ comm -12 char chardiff a
comm
命令比較笨,只能針對已經排序過的數據,若是沒有排序過,像abc
和acb
就會識別成僅僅a
相同,暫時沒想到比較好的使用場景。ip
用到git
的都知道git diff
有多好用,雖然不如可視化頁面直觀,意在快速便捷。 下面是一個例子,char
文件內容是abc
,chardiff2
內容是bcd
it
$ 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
不只能夠臨時對比兩個文件之間的差別,可是和下一個命令組合起來纔是其真正的用處。class
一般在更新幾百萬行的項目時,若是隻有幾行有變化,所有打包過來根本是不可能的,由於它太大了,並且所有拷過來也沒有意義,最大的問題是人力難以對比。 在這以前咱們須要生成一個補丁文件可視化
$ diff -Naur folder1 folder2 > diff_file $ ls folder1 char chardiff $ ls folder2 char chardiff ip
獲得補丁文件diff_file
以後,發到與foler1
版本如出一轍的位置就能夠更新成功了!打包
$ 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
:取消打過的補丁