Linux命令diff

linux命令之diff(Diff of Linux Commands) Diff 命令是 Linux 和 Unix 系统中用于比较两个文件差异的非常有用的工具。它显示了两个文件之间的不同之处,比如新增的行、被删除的行以及被修改的行。diff 命令非常适合于代码版本控制、配置文件比较以及任何需要查看两个文件之间差异的场景。 阅读详情

diff的输出格式分为传统格式和统一格式

  1)diff的传统格式输出.

  ############################################

  cat before.txt

  输出:

  This is a line to be deleted

  This is a line that will be changed

  This is a line that will be unchanged

  cat after.txt

  输出:

  This is a line that has been changed

  This is a line that will be unchanged

  This is a line that has been added

  ############################################

  diff before.txt after.txt

  输 出:

  1,2c1

  < This is a line to be deleted

  < This is a line that will be changed

  ---

  > This is a line that has been changed

  3a3

  > This is a line that has been added

  ############################################

  注释:

  传统格式的输出

  1,2c1是指替换第1个文件的第1,2行到第2个文件的第2行,这里的1,2是指第1个文件的第1,2行,c是替换的意思,最后的1是第2个文件的第1行

  <号是指第1个文件更改或删除的行

  ---号是分割两个文件

  >号是第2个文件中增加或删除的行

  3a3是指将第2个文件的第3行插入到第一个文件的第3行

  也就是说第1个文件的:

  < This is a line to be deleted

  < This is a line that will be changed

  被替换成第2个文件的:

  > This is a line that has been changed

  由于第1个文件的第3行和第2个文件的第2行一致,所以不做修改.

  由于第2个文件的第3行是第1个文件所不具有的,所以在第1个文件的最后一行增加:

  > This is a line that has been added2)patch命令的应用

  用diff的传统格式输出:

  #################################

  diff before.txt after.txt >mypatch.txt

  #################################

  用patch修补before.txt文件,使before.txt和after.txt一致.

  #################################

  cat mypatch.txt |patch before.txt

  输出:

  patching file before.txt

  #################################

  比较两个文件,现在是一致的了.

  #################################

  cmp before.txt after.txt

  #################################

  用patch命令恢复before.txt.

  #################################

  patch -R before.txt <mypatch.txt

  输出:

  patching file before.txt

  #################################

  注:-R标记告诉patch在反向上应用区别或者撤销patch.

  再比较两个文件,现在不一致了.

  #################################

  cmp before.txt after.txt

  输出:

  before.txt after.txt differ: byte 17, line 1

  #################################

3)diff的统一格式输出.

  #################################

  diff -u before.txt after.txt |tee mypatch.diff

  输出:

  --- before.txt  2009-06-20 05:21:49.000000000 +0800

  +++ after.txt   2009-06-20 04:03:16.000000000 +0800

  @@ -1,3 +1,3 @@

  -This is a line to be deleted

  -This is a line that will be changed

  +This is a line that has been changed

  This is a line that will be unchanged

  +This is a line that has been added

  #################################

  注释:

  diff -u选项是统一格式输出.

  --- before.txt  2009-06-20 05:21:49.000000000 +0800

  --- before.txt是指旧文件

  +++ after.txt   2009-06-20 04:03:16.000000000 +0800

  +++ after.txt是指新文件.

  @@ -1,3 +1,3 @@

  @@ -1,3是指第1个文件一共有3行,+1,3 @@是指第2个文件一共有3行.

  -This is a line to be deleted

  -This is a line that will be changed

  是被删除的行

  +This is a line that has been changed

  是增加的行

  This is a line that will be unchanged

  没有-号和+号是指该行不变,因为after.txt和before.txt都有这行.

  +This is a line that has been added

  是增加的行

  diff的统一格式比较与输出是按顺序进行的.

  4)diff命令在目录中的应用.

  新建old和new目录,old目录包含了初始内容,new目录包含文件的最新版本.

  ##########################################

  mkdir old new

  echo "This is one. It's unchanged." | tee old/one new/one

  echo "This is two. It will change." > old/two

  echo "This is two. It changed.">new/two

  echo "This is three. It's new" > new/three

  ##########################################

  创建修补文件

  ##########################################

  diff -Nur old/ new/ >mypatch.diff

  ##########################################

  注:-r选项按照文件目录递归创建修补文件.

  -u还是统一模式

  -N是指当diff遇到一个只存在于两个树中的一个树中的文件时,默认情况下跳过文件并且打印一个警告到stderr.

  这个行为可以通过-N选项来更改,这也导致了diff认为丢失的文件实际上是存在的,但它是空的.采用这种方式,

  一个修补文件可以包括已经创建的文件.然后应用修补程序创建新的文件.

  ##########################################

  more mypatch.diff

  输出:

  diff -Nur old/three new/three

  --- old/three   1970-01-01 08:00:00.000000000 +0800

  +++ new/three   2009-06-20 06:55:34.000000000 +0800

  @@ -0,0 +1 @@

  +This is three. It's new

  diff -Nur old/two new/two

  --- old/two     2009-06-20 06:55:08.000000000 +0800

  +++ new/two     2009-06-20 06:55:21.000000000 +0800

  @@ -1 +1 @@

  -This is two. It will change.

  +This is two. It changed.

  ##########################################

注释:

  diff -Nur old/three new/three是指下面比较old/three new/three两个文件.

  因为没有old/three文件,所以在old/three中增加+This is three. It's new

  diff -Nur old/two new/two是指下面比较old/two new/two两个文件

  因为old/two与new/two的第3行不一致,所以删除This is two. It will change.增加This is two. It changed.

  打补丁到old目录,新建old/three以及更改old/two

  ##########################################

  patch --dir old< mypatch.diff

  ls -l     old/

  输出:

  one    three  two

  ##########################################

  恢复old目录的内容,包括删除old/three,以及恢复old/two文件

  ##########################################

  patch --dir old -R <mypatch.diff

  输出:

  ls -l old/

  one  two

  ##########################################

  5)检查和合并更改

  用vim突出显示单个字符的更改来表示区别.

  ##########################################

  vim -d after.txt before.txt

  ##########################################

  用gui工具gvimdiff来显示两个文件.

  ##########################################

  gvimdiff after.txt before.txt

  ##########################################

  新建文件orig.c

  ##########################################

  vi orig.c

  void foo(void)

  {

  printf("This will be changed by me. n");

  printf("This will be unchanged,n");

  printf("This will be changed by you.n");

  }

  ##########################################

  复制文件orig.c到me.c,更改第4行为printf("This was changed by me. n");

  ##########################################

  vi me.c

  void foo(void)

  {

  printf("This was changed by me. n");

  printf("This will be unchanged,n");

  printf("This will be changed by you.n");

  }

  ##########################################

  复制文件orig.c到you.c,更改第7行为printf("This was changed by you.n");

  ##########################################

  vi you.c

  void foo(void)

  {

  printf("This will be changed by me. n");

  printf("This will be unchanged,n");

  printf("This was changed by you.n");

  }

  ##########################################

版本工具如cvs,subversion使用GNU合并工具称为diff3.

  ##########################################

  diff3 me.c orig.c you.c

  输出:

  ====1

  1:3c

  printf("This was changed by me. n");

  2:3c

  3:3c

  printf("This will be changed by me. n");

  ====3

  1:7c

  2:7c

  printf("This will be changed by you.n");

  3:7c

  printf("This was changed by you.n");

  注:

  在没有参数的情况下,diff3产生的输出说明了那行更改.

  ====1和====3指明造成同原始文件不同的是哪一个修改文件.

  编号方式基于参数序列.

  也就是第1个文件和第3个文件与原文件不同.

  1:3c

  printf("This was changed by me. n");

  3:3c

  printf("This will be changed by me. n");

  1:3c表示第1个文件的第3行与3:3c表示的第3个文件的第3行不同.

  为什么不显示与原文件的比较呢。因为第3个文件的第3行与源文件(第2个文件)相同.所以与哪个文件比较无所谓了.

  2:7c

  printf("This will be changed by you.n");

  3:7c

  printf("This was changed by you.n");

  2:7c表示第2个文件的第7行与3:7c表示的第3个文件的第7行不同.

  diff3会试图为我们进行合并.合并是在源文件的基础上,依据两个新文件进行修改

  源文件是第二个文件,第一个文件和第三个文件可以互换,但他们必须有共同的祖先,就是第二个文件.

  #######################################

  diff3 -m me.c orig.c you.c |cat -n

  输出:

  1    void foo(void)

  2    {

  3        printf("This was changed by me. n");

  4

  5        printf("This will be unchanged,n");

  6

  7        printf("This was changed by you.n");

  8    }

  ########################################为了测试更复杂的环境,新建一个文件orig.c.1

  内容如下:

  ########################################

  vi orig.c.1

  void foo(void)

  {

  printf("This will be changed by both of us.n");

  }

  ########################################

  用diff3 -m再次比较输出,如下:

  ########################################

  diff3 -m me.c orig.c.1 you.c

  void foo(void)

  {

  <<<<<<< me.c

  printf("This was changed by me. n");

  printf("This will be unchanged,n");

  printf("This will be changed by you.n");

  ||||||| orig.c.1

  printf("This will be changed by both of us.n");

  =======

  printf("This will be changed by me. n");

  printf("This will be unchanged,n");

  printf("This was changed by you.n");

  >>>>>>> you.c

  }

  ########################################

  注释:以上的格式,同cvs update,需要人工合并文件的格式是一致的.

 

====

http://www.xxlinux.com/linux/article/accidence/com/2010-03-26/18137_3.html

基于bsdiff算法的增量对比工具 Linux平台基于bsdiff算法进行改良,支持对文件或者数据流进行增量对比并对得到的增量数据进行压缩(bz2,lzo或zstd)的工具,增量文件可作为补丁对新文件进行还原。 立即下载

相关推荐

linux操作系统使用以太网连接ubuntu,设置固定ipv4

首先,您需要确定要配置的网络接口。可以使用ifconfig -a或ip addr命令来列出当前系统上的所有网络接口及其相关信息。找到您要配置的网络接口名称,例如eth0、ens33或enp0s3;保存并关闭文件后,您需要重启网络服务以使更改生效。在linux操作系统中,要使用交换机连接以太网可以直接使用交互界面;如果你的操作系统没有交互界面,你可以使用命令方式配置;点击ipv4,方式为手动,可以设置ip和子网了;开头,后接网络接口名称。第三步:点击有线最右边圆形控件;第二步:点击有线设置;

2301_79311842的博客 2404

linux -- Linux diff与patch的深入分析

diff的输出格式分为传统格式和统一格式   1)diff的传统格式输出.   ############################################   cat before.txt   输出:   This is a line to be deleted   This is a line that will be changed   This is a lin...

weixin_34293911的博客 136

锂电池主动均衡理解

锂电池主动均衡方案总结: 来自:http://wenku.baidu.com/link?url=EWiyACZ3aLPhcOjI4FZL3uQ9d0FD6dBhADQSVQiaSmRHHATTdSig1Wy39JY7-ijCzbAEYG1ymz6Lv5zhGdZaStQSHzFt6v3h3_tMrJudz9O 目前车厂采用被动均衡方案的公司:(来自网页) 目前采用主动均衡的...

weixin_34365417的博客 2909

用diff命令制作补丁

diff命令及常用选项命令格式diff [选项] old_file new_file以上old_file 和new_file可以是文件,也可以是文件夹。常用选项 选项 说明 -r 递归比较各子目录下的文件 -N 将不存在的文件当作空文件 -u 默认输出每个修改前后的3行,也可以用-u5等指定输出更多上下文。 -B 忽略对空行的比较 -w 忽略所有空格和制

车子(chezi) 3179

某手 v8.x 签名计算方法(二) sig和__NS_sig3

一、目标 今天的目标是 sig和__NS_sig3,咱们抓个包先 二、步骤 sig目测像是MD5 先jadx搜索 sig= ,没有找到结果。 再试试 sig ,晕倒 6k多个结果,突然灵光一闪,这些参数,必然是要加入到 Map中,那么我们搜索 "sig" 应该就是这个 CPU.getClock,Hook之 var signCls = Java.use('com.yxcorp.xxx.util.CPU'); signCls.getClock.implementation = function(a,b,c

fenfei331的博客 2427

Win10 / Win11 启用 Hyper-V 虚拟机详细教程(图文+命令行全攻略)

摘要:本文详细介绍Windows10/11系统启用Hyper-V虚拟化平台的方法,包含专业版/企业版的图形界面和PowerShell命令行操作,以及家庭版通过脚本强制启用的特殊方案。内容涵盖版本支持对比、操作步骤图解、常见问题解答和性能优化建议,帮助开发者快速搭建虚拟化环境进行多系统测试。附微软官方文档参考链接和详细操作示意图。

ElioXu 7053

Git导出差分(diff)包--before/after/patch

通过shell脚本并调用git生成不同分支之间的差分包。

adrianjian的专栏 7247

LTspice基础教程-028.Timestep too small

Q: “Timestep too small” error message A: If the LTspice program can’t find a solution for the guessed time step, then the program decreases the time step and tries again. This can’t work forever. If...

gaoyong_wang的博客 2万+

差分升级(Diff and Patch)

添加maven &lt;!--jbsdiff--&gt; &lt;dependency&gt; &lt;groupId&gt;io.sigpipe&lt;/groupId&gt; &lt;artifactId&gt;jbsdiff&lt;/artifactId&gt; &lt;version&gt;1.0&lt;/version&gt; &lt

qq_26563205的博客 4070

嵌入式STM32F407CET6移植OpenHarmony系统方法

文件末尾添加:export PATH=~/gcc-arm-none-eabi-10-2020-q4-major/bin:$PATH。编译完成文件输出在LiteOs源码目录下out/STM32F407_ATK_Explorer文件夹中。②点击connect to the target,下方会自动显示识别出来的芯片型号以及flash大小。⑤点击program verify并点击start,等待烧写并校验完成,你就能看到程序正在运行了。,在选择刚才我们说的Huawei_LiteOS.hex文件。

嵌入式技术开发 546

flash均衡磨损--实时保存设备数据

【代码】flash均衡磨损--实时保存设备数据。

Car12 480

【亲测免费】 推荐开源项目:jbsdiff —— 高效的Java版bsdiff实现

推荐开源项目:jbsdiff —— 高效的Java版bsdiff实现 1、项目介绍 jbsdiff 是一个基于Java语言实现的bsdiff工具,它旨在为开发者提供一种高效且方便的方式来对比和打补丁文件。bsdiff是一种流行的二进制差异算法,最初由Colin Percival开发,主要用于计算两个二进制文件之间的最小差异,jbsdiff则是这个算法在Java平台上的移植。 2、项目技术分析 jb...

gitblog_00085的博客 964

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Linux命令之diff命令

Linux diff命令用于比较文件的差异。diff以逐行的方式,比较文本文件的异同处。如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录。diff的输出结果表明需要对一个文件做怎样的操作之后才能与第二个文件相匹配。diff并不会改变文件的内容,但是diff可以输出一个ed脚本来应用这些改变。

月生的静心苑 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【Linux】【命令】diff

diff 命令基础

Tranquil_ovo的博客 3129

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Linux diff命令详解

diff(difference)命令常用来比较两个文件中的内容。diff 命令在最简单的情况下,比较两个文件的不同。如果使用“-”代替“文件”参数,则要比较的内容将来自标准输入。下面良许小编就将Linux diff命令进行详述,希望对大家有所帮助。 diff 命令是以逐行的方式比较文本文件的异同处。如果该命令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作。 diff 命令的基本格式有两种,分别如下: 比较文件 [root@liangxu ~]# d

一口Linux的专栏 6175

Linux diff 命令详解

diff命令在日常工作中非常实用,尤其是当你需要对比不同版本的文件或检查文件变更时。结合其他工具,如patch,你可以轻松管理和合并文件变化。通过掌握不同的选项,你可以更灵活地控制diff命令的输出,适应各种使用场景。

XMYX-0 2963

linux diff命令_Linux diff命令示例

linux diff命令 The Linux diff command analyses a file line by line and gives an output of a list of changes made between two files. Linux diff命令逐行分析文件,并输出两个文件之间所做更改的列表。 The command diff is short for difference, which in essencegives the differences betwe.

digitalkee的博客 711

linux教程 diff,Linux下Diff命令使用方法

1>Diff命令的功能 Linux中Diff命令的功能为逐行比较两个文本文件,列出其不同之处。它对给出的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序。2>语法 diff [options] file1 file2 该命令告诉用户,为了使两个文件file1和file2一致,需要修改它们的哪些行。如果用”-”表示file1或file2,则表示标准输入。如果f...

weixin_35117981的博客 1333

【Linux】diff命令使用

是一个用于比较两个文件或目录之间差异的命令。它可以显示两个文件之间的行级别差异,并以易于阅读的格式输出结果。由保罗·艾格特、迈克·海特尔、大卫·海耶斯、理查德·史泰尔曼和Len Tower撰写。比较 test4.text 和 test8.text 两个文件。

一个写了10年bug的程序员日常笔记。 2403

linux的diff用法,Linux下diff命令用法详解

大家好,我是良许。我们在平时工作的时候,经常要知道两个文件之间,以及同个文件不同版本之间有何异同点。在 Windows 下,有 beyond compare 这个好用的工具,而在 Linux 下,也有很多很强大的工具,良许之前也写过一篇文章介绍:这些比对工具其实都是基于 diff 命令,下面就详细介绍一些 diff 命令的用法。diff命令是一个分析文件信息的命令,可以打印出文件之间的差异。它...

weixin_30979383的博客 4178

Linux diff 命令

Linux diff 命令用于比较文件的差异。diff 以逐行的方式,比较文本文件的异同处。如果指定要比较目录,则 diff 会比较目录中相同文件名的文件,但不会比较其中子目录。

学习日常分享 1005

Linux之diff命令

diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方。diff在命令行中打印每一个行的改动。最新版本的diff还支持二进制文件。diff程序的输出被称为补丁 (patch),因为Linux系统中还有一个patch程序,可以根据diff的输出将a.c的文件内容更新为b.c。diff是svn、cvs、git等版本控制工具不可或缺的一部分。 命令格式 diff[参数][文件1或目录1][文件2或目录2] 命令功能 diff命令能比较单个文件或者目录内.

Linux,Java,SpringBoot,Python,Lua略知一点 596

【Linux命令】➾ cmp & diff

🟢 该章详细介绍了【Linux命令】cmp、diff命令的使用,及有关参数详解。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 2469

Linux 的 diff 命令

读懂 diff:http://www.ruanyifeng.com/blog/2012/08/how_to_read_diff.html 菜鸟教程:https://www.runoob.com/linux/linux-comm-diff.html diff 命令详解:https://www.cnblogs.com/wf-linux/p/9488257.htmlhttp://man.linu...

freeking101的博客 2121
上一篇: compile module with freescale LTIB
下一篇: Linux 系统内核的调试
Alan0521
博客等级 码龄19年 77粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值