前言

Linux中有两个比较命令,它们分别是commdiff,在比较文本文件的版本时通常很有用。本文介绍它们的区别和简单用法。

comm命令

该命令对两个文本文件进行比较,并显示每个文件独有的行和它们共有的行。

假设我们有两个文件:

当我们运行comm file1.txt file2.txt时,我们会得到:

在我看来,comm的输出有些难看,但它是三列。请原谅我糟糕的线条:

第一列包含第一个文件参数特有的行,第二列包含第二个文件参数特有的行,第三列包含两个文件共有的行。

我们可以通过使用选项-n,来选择隐藏指定的列,其中n可以是1、2或3。假设我们只想输出两个文件共有的行,我们可以使用comm -12 file1.txt file2.txt

diff命令

diff是一个更加复杂的工具。它支持多种输出格式,并有能力一次处理大量的文本文件集。diff经常被用来创建diff文件(补丁),这些文件被path等程序用来将一个或多个文件的一个版本转换成另一个版本。让我们在之前的两个文件上运行diffdiff file1.txt file2.txt

这是默认的输出样式。在该格式中,每组变化之前都有一个变化命令,以range operation range的形式描述将第一个文件转换为第二个文件所需的位置和变化类型。

首先来看:

1d0
< a

这告诉我们必须删除file1的第一行,也就是带a的那一行。

接下来看:

4a4
> e

这告诉我们,我们必须在第一个文件里添加一行,在第四行的位置。然后告诉我们在哪一行添加> e

我知道这是令人困惑的,坦白说,默认样式没有使用太多的上下文格式和统一格式,让我们看看那些解释更多。让我们来看看这些,并作进一步解释。

我们可以通过添加-c选项来使用上下文格式:

diff -c file1.txt file2.txt

在顶部我们可以看到,两个文件的名称以及时间戳,第一个文件使用星号标记,第二个文件使用破折号标记。diff将使用星号或破折号来让我们知道,它在整个列表的其余部分谈论的是哪个文件。

接下来我们会看到一行星号,这仅仅是为了格式化。

然后我们得到一系列的变化,在第一组变化中,我们可以看到:

*** 1,4 ****

这意味着第一个文件中的第1行到第4行。

然后可以看到:

- a
b
c
d

这就是文件的内容。只不过在a前面有个-,这意味着我们要删除它。

标志 含义
blank 不需要任何改变
(-) 需要删除行
(+) 需要添加行
! 需要改变行

在第一组变化中,我们可以看到带有-a的行需要从第一个文件中删除。第二组变化为:

--- 1,4 ----
b
c
d
+ e

---1,4----是第二个文件的范围,+ e意味着我们需要添加该行到第一个文件中,记住我们的目标是让第一个文件匹配第二个文件。

我们也可以使用统一格式,它与格式上下文类似,但是更简洁。它消除了上下文的重复行。diff -u file1.txt file2.txt

Linux系列之比较命令的更多相关文章

  1. [转帖]Linux系列之SAR命令使用详解

    Linux系列之SAR命令使用详解 sar是System Activity Reporter(系统活动情况报告)的缩写.这个工具所需要的负载很小,也是目前linux中最为全面的性能分析工具之一.此款工 ...

  2. 【Linux系列】find命令使用

    Linux下find命令在目录结构中搜素文件,病执行制定的操作. 一.命令格式 find pathname -options[-print -exec -ok] 二.命令功能 用于在文件树种查找文件, ...

  3. Linux系列之查找命令

    前言 Linux 有四个常用的查找命令:locate.whereis.which 和 find.本文介绍它们的区别和简单用法. locate命令 这个命令将检查你的整个文件系统,并找到该关键词的每一次 ...

  4. Linux系列之压缩命令

    前言 Linux 有三个常用的压缩命令:gzip.bzip2和 tar .本文介绍它们的区别和简单用法. 压缩文件 数据压缩是去除数据中冗余部分的过程,需要通过压缩算法完成.这些算法可分为两类: 无损 ...

  5. Linux系列教程(四)——Linux文件和目录处理命令

    这个系列教程的前面我们讲解了如何安装Linux系统,以及学习Linux系统的一些方法.那么从这篇博客开始,我们就正式进入Linux命令的学习.学习命令,首先要跟大家纠正的一点就是,我们不需要记住每一条 ...

  6. Linux系列教程(四)——Linux常用命令之文件和目录处理命令

    这个系列教程的前面我们讲解了如何安装Linux系统,以及学习Linux系统的一些方法.那么从这篇博客开始,我们就正式进入Linux命令的学习.学习命令,首先要跟大家纠正的一点就是,我们不需要记住每一条 ...

  7. 《Linux基础知识及命令》系列分享专栏

    <Linux基础知识及命令>系列分享专栏 本专题详细为大家讲解了Linux入门基础知识,思路清晰,简单易懂.本专题非常适合刚刚学习Linux的小白来学习,通过学习该专题会让你由入门达到中级 ...

  8. Linux系列教程(七)——Linux帮助和用户管理命令

    上篇博客我们介绍了Linux文件搜索命令,其中find是用的最多的也是功能最强大的文件或目录搜索命令,和另一个搜索命令locate的区别是,find命令是全盘搜索,刚创建的文件也能搜索的到,而loca ...

  9. Linux系列教程(九)——Linux常用命令之网络和关机重启命令

    前一篇博客我们讲解了Linux压缩和解压缩命令,使用的最多的是tar命令,因为现在很多源码包都是.tar.gz的格式,通过 tar -zcvf 能完成解压.然后对于.zip格式的文件,使用gunzip ...

随机推荐

  1. 使用VLL技术实现多家合作伙伴复用同一条链路做两端数据全透传

    公司A当前租用一条10G跨市运营商光缆,自身业务只用到一半流量,为节省成本,寻求多家合作伙伴共用链路以达到财务需求 合作伙伴需求接入链路全透传,即光缆两端接入点端口逻辑直连 当前有三种方案可以实现上述 ...

  2. CSS基础学习(一)

    1.设置背景颜色:background-color 例:background-color:#d0e4fe;或background-color:blue; 2.字体颜色·:color 例:color:r ...

  3. Proxmox 5.4使用vgpu_unlock,为GTX1060开启vGPU支持

    本文介绍如何为GTX1060显卡开启vGPU功能.消费级显卡不支持nvidia GRID vGPU功能.在2021年初,疫情激发了黑客的创作热情,给出了一个vgpu_unlock的补丁,可以让消费级显 ...

  4. 论文阅读 Predicting Dynamic Embedding Trajectory in Temporal Interaction Networks

    6 Predicting Dynamic Embedding Trajectory in Temporal Interaction Networks link:https://arxiv.org/ab ...

  5. SpringCloud Alibaba Sentinel 限流详解

    点赞再看,养成习惯,微信搜索[牧小农]关注我获取更多资讯,风里雨里,小农等你,很高兴能够成为你的朋友. 项目源码地址:公众号回复 sentinel,即可免费获取源码 熔断规则 在上一篇文章中我们讲解了 ...

  6. JavaScript Object学习笔记一

    Object.assign(target, source1, source2, ...)//用于对象的复制合并(同名属性后覆盖前)或拷贝(拷贝自身可枚举属性,不拷贝继承属性或不可枚举属性),将sour ...

  7. vivo 容器集群监控系统架构与实践

    vivo 互联网服务器团队-YuanPeng 一.概述 从容器技术的推广以及 Kubernetes成为容器调度管理领域的事实标准开始,云原生的理念和技术架构体系逐渐在生产环境中得到了越来越广泛的应用实 ...

  8. Java 将HTML转为XML

    本文介绍如何通过Java后端程序代码来展示如何将html转为XML.此功能通过采用Word API- Free Spire.Doc for Java 提供的Document.saveToFile()方 ...

  9. Node.js精进(4)——事件触发器

    Events 是 Node.js 中最重要的核心模块之一,很多模块都是依赖其创建的,例如上一节分析的流,文件.网络等模块. 比较知名的 Express.KOA 等框架在其内部也使用了 Events 模 ...

  10. 一条 SQL 语句是如何执行的

    一条 SQL 语句是如何执行的 SQL查询语句 select * from user where ID=10; MySQL 的基本架构可以分为 Server 层和存储引擎两部分.Server 层又包含 ...