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

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

本文原创首发于公众号:编程三分钟

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


comm


comm 命令比较相同的文本


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

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

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

相关文章
|
12天前
|
Shell Linux 程序员
【Linux】Shell 命令以及运行原理
【Linux】Shell 命令以及运行原理
|
4天前
|
Linux 应用服务中间件 nginx
linux小技巧: 可以补全命令 别名永久有效
linux小技巧: 可以补全命令 别名永久有效
|
4天前
|
缓存 关系型数据库 MySQL
linux 基本知识与命令
linux 基本知识与命令
|
4天前
|
网络协议 Linux 数据库
蓝易云 - Linux常用命令dhcpd命令
在使用dhcpd命令之前,需要确保已经正确配置了dhcpd.conf文件,该文件定义了DHCP服务器的行为和要分配的IP地址范围等信息。
10 0
|
4天前
|
Linux Docker 容器
蓝易云 - 【Linux】如何在linux系统重启或启动时执行命令或脚本(也支持docker容器内部)
以上就是在Linux系统和Docker容器中设置启动时运行命令或脚本的方法。希望对你有所帮助。
18 0
|
5天前
|
Linux 开发工具
蓝易云 - Linux虚拟机常用命令
以上就是一些常用的Linux命令,希望对你有所帮助。
16 0
|
5天前
|
存储 Linux 开发工具
Linux 基础(从环境搭建到基础命令)
Linux 基础(从环境搭建到基础命令)
|
8天前
|
存储 Linux 网络安全
在 Linux 中通过 SSH 执行远程命令时,无法自动加载环境变量(已解决)
SSH远程执行命令时遇到“命令未找到”问题,原因是Linux登录方式不同导致环境变量加载差异。解决方案:将环境变量写入`/etc/profile.d/`下的文件,或手动在命令前加载环境变量,如`source /etc/profile`。
|
9天前
|
关系型数据库 MySQL Java
1.Linux常用命令
1.Linux常用命令
35 1
|
13天前
|
Linux
【超全】Linux命令思维导图总结 值得收藏
【超全】Linux命令思维导图总结 值得收藏
17 0