linux文本对比diff命令详解(整理)(代码片段)

wf-linux wf-linux     2022-12-22     237

关键词:

diff 命令详解

 

1.概述

  windows系统下面就有不错的文本对比工具可以使用,例如常用的Beyond Compare,WinMerge都是图形界面的比较工具而且使用非常方便,如果你仅仅是在windows下工作,这些GUI的比较工具绝对是首选。对于在linux环境下工作的人来说,如果每次想看两个文件的区别都要将文件下载到windows环境然后用图形工具进行比较实在是太麻烦了。那么我们必须学会使用linux环境下的比较工具 diff。

2.diff如何工作,如何理解diff的执行结果

diff分析两个文件,并输出两个文件的不同的行。diff的输出结果表明需要对一个文件做怎样的操作之后才能与第二个文件相匹配【或者这么理解:与第一个文件相比,第二个文件发生了那些变化】【git diff的结果输出也是如此】。diff并不会改变文件的内容,但是diff可以输出一个ed脚本来应用这些改变。
现在让我们来看一下diff是如何工作的,假设有两个文件:

//file1.txt
I need to buy apples.
I need to run the laundry.
I need to wash the dog.
I need to get the car detailed.

//file2.txt
I need to buy apples.
I need to do the laundry.
I need to wash the car.
I need to get the dog detailed.

我们使用diff比较他们的不同:
diff file1.txt file2.txt

输出如下结果:
2,4c2,4
< I need to run the laundry.
< I need to wash the dog.
< I need to get the car detailed.
---
> I need to do the laundry.
> I need to wash the car.
> I need to get the dog detailed.

我们来说明一下该输出结果的含义,要明白diff比较结果的含义,我们必须牢记一点,diff描述两个文件不同的方式是告诉我们怎么样改变第一个文件之后与第二个文件匹配。我们看看上面的比较结果中的第一行 2,4c2,4 前面的数字2,4表示第一个文件中的行,中间有一个字母c表示需要在第一个文件上做的操作(a=add,c=change,d=delete),后面的数字2,4表示第二个文件中的行。

2,4c2,4 的含义是:第一个文件中的第[2,4]行(注意这是一个闭合区间,包括第2行和第4行)需要做出修改才能与第二个文件中的[2,4]行相匹配。
接下来的内容则告诉我们需要修改的地方,前面带 < 的部分表示左边文件的第[2,4]行的内容,而带> 的部分表示右边文件的第[2,4]行的内容,中间的 --- 则是两个文件内容的分隔符号。

3.Normal模式

上面的部分我们说明了如何查看diff命令的结果,实际上对于上面的比较,我们使用的是diff命令的Normal模式,这也是diff命令的默认模式,也就是说diff两个文件的时候如果不加模式参数则是默认模式进行比较,其效果与(--normal)一样,我们举一些例子来说明Normal模式下的输出结果(前面已经说明了一种比较结果),为了直观查看两个文件的不同我在windows下面通过BeyondCompare工具列出两个文件的不同,而截图下面的黑色部分则是diff的比较输出截图。

第一个文件比第二个文件少了行的情况:

技术分享图片

第一个文件比第二个文件多出行的情况:

技术分享图片

第一个文件与第二个文件不相同的情况:

技术分享图片

以上diff命令执行的时候没有指定额外的模式参数,所以其使用的是默认的Normal模式,效果与添加命令行参数--normal 是一样的。

4.Context模式

默认情况下的模式输出结果实际上是符合计算机的思维方式,不太直观,所以其输出结果并不能够很好的被人理解,diff命令除了默认模式之外还提供了另外两种模式,Context和Unified模式,本节我们说说如何查阅Context模式下的输出结果。diff命令应用Context模式只需要添加命令行参数 diff -c  即可,我们先看看两个案例文件:

技术分享图片

接下来说明这两个文件以diff  -c 方式比较的结果:

技术分享图片

 

5.Unified模式

diff还有一种比较方式,也即Unified模式,使用命令行 –u 来执行该模式的比较。其比较结果与Context模式很像,但是简化了一些输出,我们看看我们的案例文件,与上面的一样:

技术分享图片

使用diff –u 比较的结果:

技术分享图片

可以看到其比较结果与Context模式实际上差不多,只不过将比较结果合并到一起了。

6.比较目录

使用diff可以比较两个目录,其比较格式是  diff  directory1  directory2 查看如下目录比较结果:

技术分享图片

比较两个目录的时候无非是有的文件仅仅存在于某个目录中而在另一个目录中没有,如果存在同名的文件,则比较这两个文件的不同。diff比较目录的结果我们可以结合grep命令筛选出我们想要的输出,例如仅仅输出两个目录下不同的文件而忽略掉某一个目录独有另一个目录不存在的输出记录。

 

7.参数 -e 将比较的结果保存成一个ed脚本,之后ed程序可以执行该脚本文件,从而将file1修改成与file2的内容相同,这一般在patch的时候有用。

diff  -e  1.txt  2.txt  > script.txt
这样就是生成了一个ed可以执行的脚本文件script.txt,生成脚本文件之后我们还需要做一个操作, 在脚本文件末尾添加ed的write指令,只需要执行 echo "w" >>script.txt 将w指令附加到脚本文件的最后一行即可。
那么如何应用该脚本文件呢,可以这样使用:
ed  -  1.txt < script.txt 
注意中间的 – 符号表示从标准输入中读取,而 < script.txt 则重定向script.txt的内容到标准输入。这样执行之后1.txt的内容将与2.txt完全相同。

 

摘自:http://man.linuxde.net/diff

           https://www.cnblogs.com/everest33Tong/p/6868654.html


























linux知识盲区整理(代码片段)

Linux知识盲区整理grep相关用法整理linux命令详解之pwd命令USERADD命令详解Linux下的chkconfig命令详解Linuxntsysv命令grep相关用法整理grep命令用法解析linux命令详解之pwd命令pwd来查看当前目录的绝对路径默认,使用连接文件,直接... 查看详情

diff命令详解(代码片段)

...inuxdiff命令用于比较文件的差异。diff以逐行的方式,比较文本文件的异同处。如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录用法:diff[-abBcdefHilnNpPqrstTuvwy][-<行数>][-C<行数>][-D<巨... 查看详情

linux命令diff、patch

...考技术A背景在Linux系统环境的工作过程中,经常遇到需要对比文件差异的情况,此时,使用Linux提供的diff工具可以方便的发现文件不同版本之间差异,从而快速排除解决问题。Windows端有强大文件对比工具BeyondCompare。patch命令可... 查看详情

linux中两个文档怎么对比内容是不是一致

...内容。[语法]:diff[参数]文件1文件2[说明]:本命令比较两个文本文件,将不同的行列出来-b将一串空格或TAB转换成一个空格或TAB-e生成一个编辑角本,作为ex或ed的输入可将文件1转换成文件2[例子]:difffile1file2diff-bfile1file2diff-efile1file2&g... 查看详情

vimdiff文件对比与合并命令

...diff模式,在diff命令的基础上提供的更高级的功能,用于文本的比较和合并    注意:vimdiff的使用依赖于vim和diff,要确保系统中安装有vim和diff 二、启动方法vimdiff文件1文件2vim-d文件1文件2  三、常用命令  跳转... 查看详情

linux下比较两个文本文件的不同——diff命令

1>Diff命令的功能Linux中Diff命令的功能为逐行比较两个文本文件,列出其不同之处。它对给出的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序。2>语法diff[options]file1file2该命令告诉用户... 查看详情

docker命令详解(二十一):diff(代码片段)

一、命令作用检查容器里文件结构的更改。二、命令语法dockerdiff[OPTIONS]CONTAINER三、使用示例查看容器exp_mysql的文件结构更改:dockerdiffexp_mysql四、帮助查看  查看详情

29-docker-常用命令详解-dockerhistory/diff(代码片段)

常用命令详解-dockerhistory/diff前言dockerhistory语法格式options说明使用示例dockerdiff语法格式options说明使用示例前言本篇来学习下dockerhistory和dockerdiff命令dockerhistory作用:查看指定镜像的创建历史语法格式dockerhistory[OPTIONS]IMAGEoptio... 查看详情

29-docker-常用命令详解-dockerhistory/diff(代码片段)

常用命令详解-dockerhistory/diff前言dockerhistory语法格式options说明使用示例dockerdiff语法格式options说明使用示例前言本篇来学习下dockerhistory和dockerdiff命令dockerhistory作用:查看指定镜像的创建历史语法格式dockerhistory[OPTIONS]IMAGEoptio... 查看详情

详解linux中的cat文本输出命令用法

作系统 > LINUX > 详解Linux中的cat文本输出命令用法Linux命令手册  发布时间:2016-01-1414:14:35 作者:张映   我要评论 这篇文章主要介绍了Linux中的cat文本输出命令用法,是Linux入门学习中... 查看详情

vimdiff好用的可视化文本对比工具(代码片段)

...得的特点仍有很大的生存空间,这篇短文介绍了一个文本比较和合并的小工具:vimdiff。希望能对在Unix/Linux系统上进行开发的朋友有所帮助。源程序文件(通常是纯文本文件)比较和合并工具一直是软件开发过程... 查看详情

玩转linux之sed命令详解(代码片段)

Linuxsed命令是利用script来处理文本文件。sed可依照script的指令,来处理、编辑文本文件。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。执行时,sed会从文件或者标准输入中读取一行,将其复制... 查看详情

linux-diff--比较两个文件并输出不同之处

...或者目录内容。如果指定比较的是文件,则只有当输入为文本文件时才有效。以逐行的方式,比较文本文件的异同处。如果指定比较的是目录的的时候,diff命令会比较两个目录下名字相同的文本文件。列出不同的二进制文件、... 查看详情

diff命令详解

  基础命令学习目录首页 原文链接:https://www.cnblogs.com/wangqiguo/p/5793448.html阅读目录1.概述2.diff如何工作,如何理解diff的执行结果3.Normal模式4.Context模式5.Unified模式6.比较目录7.一些有用的参数回到顶部1.概述本文将要讨... 查看详情

linux怎么安装diffstat

...内容。[语法]:diff[参数]文件1文件2[说明]:本命令比较两个文本文件,将不同的行列出来-b将一串空格或TAB转换成一个空格或TAB本回答被提问者采纳 查看详情

diff命令详解

...录7.一些有用的参数回到顶部1.概述本文将要讨论的是diff命令,diff用来比较两个文件。当然文件比较的工具很多,windows系统下面就有不错的工具可以使用,例如常用的BeyondCompare,WinMerge都是图形界面的比较工具而且使用非常 查看详情

linux常用操作命令(代码片段)

...件或目录rmdir删除空目录ln建立链接文件tree显示目录树2.文本文件操作命令命令功能cat、tac显示文本文件内容diff显示两个文本文件 查看详情

linux常用操作命令(代码片段)

...件或目录rmdir删除空目录ln建立链接文件tree显示目录树2.文本文件操作命令命令功能cat、tac显示文本文件内容diff显示两个文本文件 查看详情