linux 命令-文本比较comm、diff、patch
  TEZNKK3IfmPf 2023年11月14日 53 0

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

comm 命令比较相同的文本

$ cat char
a
b
c
$ cat chardiff
a
d
c

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

$ comm char chardiff
a
b
c
d
c

如上,看起来输出的乱七八糟,他只是把两个文件按列把各自特有的输出,最后再输出共有的。所以参数​​-1​​​代表不输出第1列,也就是第2列和第3列。​​-2​​​输出第1列和第3列,​​-3​​输出第1、2列的。参数比较废,看起来很费劲。

$ comm -1 char chardiff
a
d
c
$ comm -12 char chardiff
a

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

diff

用到​​git​​​的都知道​​git diff​​​有多好用,虽然不如可视化页面直观,意在快速便捷。下面是一个例子,​​char​​​文件内容是​​abc​​​,​​chardiff2​​​内容是​​bcd​

$ 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 补丁

通常在更新几百万行的项目时,如果只有几行有变化,全部打包过来根本是不可能的,因为它太大了,而且全部拷过来也没有意义,最大的问题是人力难以对比。在这之前我们需要生成一个补丁文件

$ 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​​ :取消打过的补丁

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年05月31日   51   0   0 linux服务器
  TEZNKK3IfmPf   2024年05月31日   30   0   0 linux服务器centos
  TEZNKK3IfmPf   2024年05月31日   29   0   0 linuxbind
  TEZNKK3IfmPf   2024年05月31日   39   0   0 linuxshell
TEZNKK3IfmPf