diff 命令有三种模式:上下文模式(context),合并模式(unified)和普通模式(normal)。其中最常用的是合并模式。

合并模式

diff -u f1 f2
--- f1	2024-03-11 21:08:41
+++ f2 2024-03-11 21:08:40
@@ -3,7 +3,7 @@
3
4
5
-6
+66
7
8
9
  1. 第一部分表示文件名和时间

    --- f1	2024-03-11 21:08:41
    +++ f2 2024-03-11 21:08:40
    • --- 表示变动前的文件
    • +++ 表示变动后的文件
  2. 第二部分表示变动的位置

    @@ -3,7 +3,7 @@
    • -3,7- 号表示变动前的文件,3,7 表示从第 3 行开始的连续 7 行
    • +3,7:表示变动后的文件的从第 3 行开始的连续 7 行
  3. 第三部分表示变动的具体内容,上下文各显示 3 行

    -6
    +66
    • 标志位 - 表示第一个文件删除的行
    • 标志位 + 表示第二个文件新增的行

附:git 版本的 diff

git diff
diff --git a/f1 b/f1
index 6f8a38c..449b072 100644
--- a/f1
+++ b/f1
@@ -3,7 +3,7 @@
3
4
5
-6
+66
7
8
9
  1. 第一部分表示比较的文件

    diff --git a/f1 b/f1
    • diff --git 表示这是 git 版本的 diff
    • a/f1 b/f1 表示进行比较的是 a 版本的 f1(即变动前)和 b 版本的 f1(即变动后)
  2. 第二部分表示两个文件的哈希值

    index 6f8a38c..449b072 100644
    • index xxx..xxx表示两个版本的 git 哈希值(index 区域的 6f8a38c 对象,与工作目录区域的 449b072 对象进行比较)
    • 100644 是对象的模式(普通文件,644 权限)
  3. 后面的部分与 unified 模式相同

上下文模式

上下文各显示 3 行

diff -c f1 f2
*** f1	Mon Mar 11 21:05:01 2024
--- f2 Mon Mar 11 21:04:56 2024
***************
*** 3,9 ****
3
4
5
! 6
7
8
9
--- 3,9 ----
3
4
5
! 66
7
8
9
  1. 第一部分表示文件名和时间

    *** f1	Mon Mar 11 21:05:01 2024
    --- f2 Mon Mar 11 21:04:56 2024
    • *** 表示变动前的文件
    • --- 表示变动后的文件
  2. 第三行的星号 *************** 是分隔符

  3. 第二部分表示具体的变动

    *** 3,9 ****
    3
    4
    5
    ! 6
    7
    8
    9
    --- 3,9 ----
    3
    4
    5
    ! 66
    7
    8
    9
    • *** 表示变动前的文件
    • --- 表示变动后的文件
    • 3,9 表示下面的内容是该文件的第 3 到 9 行
    • 每行前面的标记位,+ 表示该行为新增,! 表示该行有改动,- 表示该行被删除

普通模式

普通模式是最原始的 diff 格式。

原文件

f1:

1
2
3
4
5
6
7
8
9

f2:

1
2
3
4
5
66
7
8
9

进行比较:

diff f1 f2
6c6
< 6
---
> 66
  1. 第一部分 6c6:表示变动的位置。

    • 第一个 6 表示文件 f1 的第 6 行有变化。
    • c 表示变动模式是 change(变更)。除了 change 外,变动模式还有 add(新增)和 delete(删除)。
    • 第二个 6 表示变动后变成 f2 的第 6 行。
  2. 第二行 < 6 和 f1 相关。< 表示要从 f1 当中去除该行,后面的 6 表示该行的内容。

  3. 第三行 --- 用来分割 f1 和 f2 的内容。

  4. 第四行 > 66 和 f2 相关。> 表示 f2 增加了该行,后面的 66 表示该行的内容。

参考:读懂 diff | 阮一峰的网络日志

如何阅读 diff 命令的输出的更多相关文章

  1. Linux下diff命令用法详解

    大家好,我是良许. 我们在平时工作的时候,经常要知道两个文件之间,以及同个文件不同版本之间有何异同点.在 Windows 下,有 beyond compare 这个好用的工具,而在 Linux 下,也 ...

  2. 通过实例看懂diff命令输出

    摘自:http://blog.sina.com.cn/s/blog_612144f30100nkpt.html ############################### 实例: 有这样两个文件: ...

  3. diff 命令详解

    [自注:] 1,还有个colordiff命令,用颜色标识不同的地方.需要先安装 2,diff normal模式中 2,5表示从第二行到第五行 3,diff -c 模式中,2,5表示从第二行到第五行 4 ...

  4. linux shell 脚本攻略学习13--file命令详解,diff命令详解

    一.file命令详解 find命令可以通过查看文件内容来找出特定类型的文件,在UNIX/ Linux系统中,文件类型并不是由文件扩展名来决定的(windows中却正是这么做的),file命令的目的是从 ...

  5. linux diff命令

    diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方.diff在命令行中打印每一个行的改动.最新版本的diff还支持二进制文件.diff程序的 ...

  6. 每天一个linux命令(36):diff 命令

    diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方.diff在命令行中打印每一个行的改动.最新版本的diff还支持二进制文件.diff程序的 ...

  7. linux中diff命令用法

    diff 命 令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方.diff在命令行中打印每一个行的改动.最新版 本的diff还支持二进制文件.diff程 ...

  8. 每天一个linux命令(28):diff 命令

    diff 命 令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方.diff在命令行中打印每一个行的改动.最新版 本的diff还支持二进制文件.diff程 ...

  9. 每天一个命令day1【diff 命令】(具体实例看下一节)

    diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方.diff在命令行中打印每一个行的改动.最新版本的diff还支持二进制文件.diff程序的 ...

  10. diff命令和patch命令

    diff命令和patch命令 Linux就这个范儿 2.9.5 文件对比命令——diff diff命令搭建网站离不开数据库,在Linux系统上我们使用源码安装了MySQL服务器.不久我们发现 Goog ...

随机推荐

  1. 做一个单纯的react-image显示组件

    最近项目上有一个需求,在显示图片的时候,需要传递自定义的头部就行认证.google了一番之后,发现没有现成的组件库可以使用[也可能是我没找到],所以请求图片只能采用xhr方式来异步加载.下面就是在做这 ...

  2. 基于Redis在定时任务里判断其他定时任务是否已经正常执行完的方案

    执行的定时任务是基于其他定时任务计算得到的结果基础上做操作的,那么如何来确定其他存在数据依赖的定时任务已经执行完成呢? 在分布式环境里,可通过集群的redis来解决这个问题: 即,在跑批任务开始时,将 ...

  3. 通过canvas计算任意两个颜色的插值

    通过canvas可以协助我们做很多颜色计算的辅助,比如颜色转换,渐变颜色计算. 对于颜色转换,之前写过一篇文章:<通过canvas转换颜色为RGBA格式及性能问题> , 读者可以查阅该篇文 ...

  4. vue项目 回到顶部功能 定位在头部

    'backBox'是外层容器类名, 根据传入的index,定位在不同的位置 组件: <template> <div class="toTop" @click=&q ...

  5. 2024-07-24:用go语言,给定一个整数数组 nums,其中至少包含两个元素。 可以根据以下规则执行操作:选择最前面两个元素删除、选择最后两个元素删除,或选择第一个和最后一个元素删除。 每次操作

    2024-07-24:用go语言,给定一个整数数组 nums,其中至少包含两个元素. 可以根据以下规则执行操作:选择最前面两个元素删除.选择最后两个元素删除,或选择第一个和最后一个元素删除. 每次操作 ...

  6. springboot集成minIO

    文件系统:负责管理和存储文件的系统软件.操作系统通过文件系统提供的接口去存取文件,用户通过操作系统访问磁盘上的文件 minIO:轻量级服务分布式文件系统,适合存储非机构化数据.采用去中心化共享架构,结 ...

  7. RS485总线防雷保护方案(转)

    RS485作为最为最常用的电表通讯方式之一.日常生活中雷电和静电干扰已经成为485通信总线在实际工程经常遇到的问题.故如何对芯片以及总线进行有效的保护,是摆在每一个使用者面前的一个问题.在这里,我们主 ...

  8. 【微信小程序】02 常用标签组件

    轮播标签: 轮播图 <swiper> <!-- 轮播项 --> <swiper-item>1</swiper-item> <swiper-item ...

  9. 【Vue】接口模块化处理

    在前端Vue项目中,接口会被统一放在一个目录中管理: 一个模块的所有接口放在一个JS文件中: 文件会导入封装好的请求方法,和动态绑定的接口地址 import request from '@/utils ...

  10. 买二手NVIDIA网卡被坑记录:某宝的咸鱼二手交易网站上购入NVIDIA Mellanox ConnectX-3 网卡 居然不支持Windows 11操作系统 —— 老二手40Gbps的NVIDIA网卡已经不被新操作系统支持

    原本是打算去大连的人工智能计算中心去做技术负责人的,不过考虑到工作性质再考虑到自己的一些现实情况也就放弃了这个职位(比较在大连理工大学的博士学位还没有读下来,还是有所牵挂的).同时,由于自己已经退出了 ...