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

相关文章
相关标签/搜索