本文原创首发于公众号:编程三分钟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
:取消打过的补丁