大家好,我是良许。
我们在平时工作的时候,经常要知道两个文件之间,以及同个文件不同版本之间有何异同点。在 Windows 下,有 beyond compare 这个好用的工具,而在 Linux 下,也有很多很强大的工具,良许之前也写过一篇文章介绍:
这些比对工具其实都是基于 diff
命令,下面就详细介绍一些 diff 命令的用法。
diff 命令是一个分析文件信息的命令,可以打印出文件之间的差异。它可以逐行地比较两个文件的内容,也可以递归地比较文件夹的内容。diff 命令的输出内容可以让我们知道要使两个文件相同需要做哪些修改,这对于我们的工作很有帮助。
在开始前,我们先用文件编辑器创建两个内容相同的文件。这里我们使用的是 nano 。
$ nano diffsample1
输入内容:
发布
优质的
技术文章
使用 Ctrl
+X
和 Y
保存并退出。
创建第二个文件:
$ nano diffsample2
输入同样的内容并保存退出。
需要注意的是,空格和 Tab
对两个文件是否完全相同会有影响。
使用 diff 命令查看两个文件是否有差异:
$ diff diffsample1 diffsample2
这时 diff 命令没有输出任何信息,说明这两个文件的内容是完全相同的。
现在我们对 diffsample2 做一些修改,将文章改为帖子然后保存并退出
再使用 diff 命令:
$ diff diffsample1 diffsample2
查看输出的信息:
在以上输出信息中,3c3 表示第一个文件的第三行需要被替换为第二个文件的第三行,然后为我们提示出了需要修改的内容: 技术文章 和 技术帖子
diff 命令所参考的不是第一个文件,而是第二个文件,它的输出信息有以下几种字符:
c : 表示必须做一些修改
a : 表示必须添加一些内容
d : 表示必须删除一些内容
字符前的数字表示第一个文件中的行数,字符后的内容表示第二个文件中的行数。
< 表示引用的第一个文件中的内容,而 > 表示引用的第一个文件中的内容
现在让我们交换两个文件的顺序再试试:
$ diff diffsample2 diffsample1
在交换文件顺序之后 diff 参考的文件变成了 diffsample1,提示我们将 技术帖子 修改为 技术文章 。
现在我们将 diffsample1 编辑为以下内容:
删除了第二行和第三行,再试试使用 diff 命令
$ diff diffsample2 diffsample1
现在我们可以看到,因为我们以 diffsample1 作为参考,为了使两个文件相同,我们需要删除 diffsample2 中的第二行和第三行,然后就会和 diffsample1 中的第一行内容相同。
我们再试试交换 diffsample1 和 diffsample2 的顺序:
$ diff diffsample1 diffsample2
可以看到,现在 diff 给我们的提示信息变为了在 diffsample1 中的第一行后面添加 diffsample2 中的第二行和第三行内容。
现在让我们来测试区分内容的大小写:
编辑 diffsample1 的内容为:
编辑 diffsample1 的内容为:
两个文件中唯一的区别是第三行的大小写,再试试 diff 命令
$ diff diffsample1 diffsample2
可以看到 diff 命令找出了大小写的不同,如果我们不想检查大小写,可以使用 -i 选项。
$ diff -i diffsample1 diffsample2
这时内容没有区别,diff 没有输出任何信息。
我们可以使用 -u 选项以统一的格式输出信息:
输出信息中使用 - 和 + 表示哪些内容需要被删除或者添加来使得文件内容相同。
之前提到过 diff 命令会检查空格或tab,如果我们想要忽略空格和tab,可以使用 -w 选项。
在 diffsample2 的第二行 good 后面输入一些空格和tab,并把之前的大写改回小写。
再使用 diff 命令
$ diff diffsample1 diffsample2
可以看到找出了不同,再使用 -w 忽略空格和tab,这时便没有任何输出信息了。
diff 命令还有许多选项,可以用来忽略某些情况或者更改输出等,我们可以使用 man 命令来获取更多的相关信息。
公众号:良许Linux
有收获?希望老铁们来个三连击,给更多的人看到这篇文章
Linux下diff命令用法详解的更多相关文章
-
Linux下find命令用法详解
Linux下find命令用法详解 学神VIP烟火 学神IT教育:XueGod-IT 最负责任的线上直播教育平台 本文作者为VIP学员 烟火 第一部分:根据文件名查找 1.在当前目录 ...
-
linux下xargs命令用法详解 【转】
转自:http://blog.chinaunix.net/uid-128922-id-289992.html xargs在linux中是个很有用的命令,它经常和其他命令组合起来使用,非常的灵活. xa ...
-
linux下xargs命令用法详解
原文:http://blog.chinaunix.net/uid-128922-id-289992.html xargs在linux中是个很有用的命令,它经常和其他命令组合起来使用,非常的灵活. xa ...
-
转 linux下xargs命令用法详解
xargs在linux中是个很有用的命令,它经常和其他命令组合起来使用,非常的灵活. xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤 ...
-
linux下sort命令使用详解---linux将文本文件内容加以排序命令
转载自:http://www.cnblogs.com/hitwtx/archive/2011/12/03/2274592.html linux下sort命令使用详解---linux将文本文件内容加以排 ...
-
Linux下diff的操作详解
总述 Linux diff命令用于比较文件的差异.diff以逐行的方式,比较文本文件的异同处.特别是比较两个版本不同的文件,如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子 ...
-
【Linux】date命令用法详解(日期格式)
inux下date命令用法 date [OPTION]… [+FORMAT] date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] date命令参数 ...
-
LINUX下分区命令Parted详解
通常划分分区工具我们用的比较多是fdisk命令,但是现在由于磁盘越来越廉价,而且磁盘空间越来越大.而fdisk工具他对分区是有大小限制的,它只能划分小于2T的磁盘.现在的磁盘空间已经远远大于2T,有两 ...
-
linux下top命令参数详解
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法. 内存信息.内容如下: Mem: 191272k to ...
随机推荐
-
UDP协议开发
UDP是用户数据报协议(User Datagram Protocol,UDP)的简称,其主要作用是将网络数据流量压缩成数据报形式,提供面向事务的简单信息传送服务.与TCP协议不同,UDP协议直接利用I ...
-
uboot命令
uboot是怎么启动kernel的呢? 先熟悉一下uboot的命令吧. 首先是md, 查看内存. OpenJTAG> md 000000000: ea000014 e59ff014 e59ff0 ...
-
uva 437 巴比伦塔(DAG上dp)
巴比伦塔 紫书P269 看完紫书,终于可以自己写一个dp了 :) [题目链接]巴比伦塔 [题目类型]DAG上dp &题意: 有n种立方体 n<=30,每种有无穷个,要求选一些立方体摞成一 ...
-
android微信简单界面
这几天没事做了一个简单的菜单布局,在这里我没有添加任何的功能只是做了一个简单的布局.看着还可以,就想着与大家分享一下. 代码如下: <LinearLayout xmlns:android=&qu ...
-
application,session,cookie三者之间的区别和联系
application: 程序全局变量对象,对每个用户每个页面都有效 session: 用户全局变量,对于该用户的所有操作过程都有效 session主要是在服务器端用,一般对客户端不 ...
-
物理数据模型(PDM)->;概念数据模型 (CDM)->;面向对象模型 (OOM):适用于已经设计好数据库表结构了。
物理数据模型(PDM)->概念数据模型 (CDM)->面向对象模型 (OOM):适用于已经设计好数据库表结构了. 步骤如下: 一.反向生成物理数据模型PDM 开发环境 PowerDes ...
-
Leetcode题解(27)
86. Partition List 题目 分析:题目要求将链表划分为两部分,前半部分小于x,后半部分大于等于x,并且各个数之间的相对顺序不变. 解题思路是:从头开始扫描链表,找打第一个大于等于x的数 ...
-
C语言volatile关键字的用法
volatile关键字的意义在于让被关键字修饰的变量每次使用时都重新去主内存里读取变量,而不是从高速缓存去读取. int a = 1; 普通变量定义之后,若要使用它,都会 先把它的值从主内存拷贝到高速 ...
-
关于前段JS代码报错问题的解决方法
最近接手别人的一个项目,项目导入到Myeclipse中,JS代码一直报错,说missing semicolon.该错误是Myeclipse在检查JS代码的过程出现的. 后来经过检查,发现JS代码本身没 ...
-
Select逻辑顺序图
Select逻辑顺序图