前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux 命令-文本比较comm、diff、patch

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

作者头像
机智的程序员小熊
发布2019-12-11 21:19:43
3.8K0
发布2019-12-11 21:19:43
举报
文章被收录于专栏:技术面面观技术面面观

今天学了三个文本比较的命令分享给大家。——编程三分钟

comm

comm 命令比较相同的文本

代码语言:javascript
复制
$ cat char
a
b
c
$ cat chardiff
a
d
c

比如,我有两个文件charchardiff如上,略有不同,就可以用这个命令输出。

代码语言:javascript
复制
$ comm char chardiff
        a
b
c
    d
    c

如上,看起来输出的乱七八糟,他只是把两个文件按列把各自特有的输出,最后再输出共有的。

所以参数-1代表不输出第1列,也就是第2列和第3列。-2输出第1列和第3列,-3输出第1、2列的。参数比较废,看起来很费劲。

代码语言:javascript
复制
$ comm -1 char chardiff
    a
d
c
$ comm -12 char chardiff
a

comm命令比较笨,只能针对已经排序过的数据,如果没有排序过,像abcacb就会识别成仅仅a相同,暂时没想到比较好的使用场景。

diff

用到git的都知道git diff有多好用,虽然不如可视化页面直观,意在快速便捷。

下面是一个例子,char文件内容是abcchardiff2内容是bcd

代码语言:javascript
复制
$ 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不仅可以临时对比两个文件之间的差异,但是和下一个命令组合起来才是其真正的用处。

patch 补丁

通常在更新几百万行的项目时,如果只有几行有变化,全部打包过来根本是不可能的,因为它太大了,而且全部拷过来也没有意义,最大的问题是人力难以对比。

在这之前我们需要生成一个补丁文件

代码语言:javascript
复制
$ diff -Naur folder1 folder2 > diff_file
$ ls folder1
char chardiff
$ ls folder2
char chardiff ip

得到补丁文件diff_file之后,发到与foler1版本一模一样的位置就可以更新成功了!

代码语言:javascript
复制
$ cd folder1
$ patch < diff_file
$ patch < diff_file
patching file chardiff
patching file ip

如果要回滚就加-R参数

代码语言:javascript
复制
$ patch -R < diff_file
patching file chardiff
patching file ip

它的参数如下 -p num :忽略几层文件夹 -E :如果发现了空文件,那么就删除它 -R :取消打过的补丁

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机智的程序员小熊 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • comm
  • diff
  • patch 补丁
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档