Linux系列之比较命令
前言
Linux中有两个比较命令,它们分别是comm和diff,在比较文本文件的版本时通常很有用。本文介绍它们的区别和简单用法。
comm命令
该命令对两个文本文件进行比较,并显示每个文件独有的行和它们共有的行。
假设我们有两个文件:
当我们运行comm file1.txt file2.txt时,我们会得到:
在我看来,comm的输出有些难看,但它是三列。请原谅我糟糕的线条:
第一列包含第一个文件参数特有的行,第二列包含第二个文件参数特有的行,第三列包含两个文件共有的行。
我们可以通过使用选项-n,来选择隐藏指定的列,其中n可以是1、2或3。假设我们只想输出两个文件共有的行,我们可以使用comm -12 file1.txt file2.txt。
diff命令
diff是一个更加复杂的工具。它支持多种输出格式,并有能力一次处理大量的文本文件集。diff经常被用来创建diff文件(补丁),这些文件被path等程序用来将一个或多个文件的一个版本转换成另一个版本。让我们在之前的两个文件上运行diff:diff 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系列之比较命令的更多相关文章
- [转帖]Linux系列之SAR命令使用详解
Linux系列之SAR命令使用详解 sar是System Activity Reporter(系统活动情况报告)的缩写.这个工具所需要的负载很小,也是目前linux中最为全面的性能分析工具之一.此款工 ...
- 【Linux系列】find命令使用
Linux下find命令在目录结构中搜素文件,病执行制定的操作. 一.命令格式 find pathname -options[-print -exec -ok] 二.命令功能 用于在文件树种查找文件, ...
- Linux系列之查找命令
前言 Linux 有四个常用的查找命令:locate.whereis.which 和 find.本文介绍它们的区别和简单用法. locate命令 这个命令将检查你的整个文件系统,并找到该关键词的每一次 ...
- Linux系列之压缩命令
前言 Linux 有三个常用的压缩命令:gzip.bzip2和 tar .本文介绍它们的区别和简单用法. 压缩文件 数据压缩是去除数据中冗余部分的过程,需要通过压缩算法完成.这些算法可分为两类: 无损 ...
- Linux系列教程(四)——Linux文件和目录处理命令
这个系列教程的前面我们讲解了如何安装Linux系统,以及学习Linux系统的一些方法.那么从这篇博客开始,我们就正式进入Linux命令的学习.学习命令,首先要跟大家纠正的一点就是,我们不需要记住每一条 ...
- Linux系列教程(四)——Linux常用命令之文件和目录处理命令
这个系列教程的前面我们讲解了如何安装Linux系统,以及学习Linux系统的一些方法.那么从这篇博客开始,我们就正式进入Linux命令的学习.学习命令,首先要跟大家纠正的一点就是,我们不需要记住每一条 ...
- 《Linux基础知识及命令》系列分享专栏
<Linux基础知识及命令>系列分享专栏 本专题详细为大家讲解了Linux入门基础知识,思路清晰,简单易懂.本专题非常适合刚刚学习Linux的小白来学习,通过学习该专题会让你由入门达到中级 ...
- Linux系列教程(七)——Linux帮助和用户管理命令
上篇博客我们介绍了Linux文件搜索命令,其中find是用的最多的也是功能最强大的文件或目录搜索命令,和另一个搜索命令locate的区别是,find命令是全盘搜索,刚创建的文件也能搜索的到,而loca ...
- Linux系列教程(九)——Linux常用命令之网络和关机重启命令
前一篇博客我们讲解了Linux压缩和解压缩命令,使用的最多的是tar命令,因为现在很多源码包都是.tar.gz的格式,通过 tar -zcvf 能完成解压.然后对于.zip格式的文件,使用gunzip ...
随机推荐
- EF Core 配置模型
0 前言 本文的第一节,会概述配置模型的作用(对数据模型的补充描述). 第二节描述两种配置方式,即:数据注释(data annotations)和 Fluent API 方式. 第三节开始,主要是将常 ...
- 斯坦福NLP课程 | 第11讲 - NLP中的卷积神经网络
作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www. ...
- 438. Find All Anagrams in a String - LeetCode
Question 438. Find All Anagrams in a String Solution 题目大意:给两个字符串,s和p,求p在s中出现的位置,p串中的字符无序,ab=ba 思路:起初 ...
- chkconfig-配置系统服务
管理Linux系统开机启动项. chkconfig命令默认在CentOS7+中不被使用了,由于系统服务管理都交给了systemctl托管. 语法 chkconfig [--list] [--type ...
- SPFA 最短路算法
SPFA算法 1.什么是spfa算法? SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环.SPFA一般情况复杂度是O(m)O(m) ...
- java中关于while(true)的理解
java中while(true)的理解: while(true)作为无限循环,经常在不知道循环次数的时候使用,并且需要在循环内使用break才会停止,且在run()方法中基本都会写while(true ...
- 【ASP.NET Core】配置应用程序地址的N多种方法
下面又到了老周误人子弟的时间,今天要误大伙的话题是:找找有多少种方法可以设置 ASP.NET Core 应用的地址,即 URL. 精彩马上开始! 1.UseUrls 方法 这是一个扩展方法,参数是可变 ...
- 【Redis】skiplist跳跃表
有序集合Sorted Set zadd zadd用于向集合中添加元素并且可以设置分值,比如添加三门编程语言,分值分别为1.2.3: 127.0.0.1:6379> zadd language 1 ...
- SAP FPM 相关包 APB_FPM_CORE
related interface: APB_FPM_COREAPB_FPM_CORE_4_EXT_SCAPB_FPM_CORE_INTERNALAPB_FPM_CORE_RESTRICTED
- 深入解析kubernetes中的选举机制
Overview 在 Kubernetes的 kube-controller-manager , kube-scheduler, 以及使用 Operator 的底层实现 controller-rumt ...