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. 【OpenVINO™】YOLOv10在CPU上也能实现50+FPS推理—使用OpenVINO C++部署YOLOv10

    ​ 英特尔发行版 OpenVINO 工具套件基于 oneAPI 而开发,可以加快高性能计算机视觉和深度学习视觉应用开发速度工具套件,适用于从边缘到云的各种英特尔平台上,帮助用户更快地将更准确的真实世界 ...

  2. github中的子模块(git submodule)

    git中支持引用另外一个开源库,并且可以指定依赖的分支或者提交记录号. 比如fltk-rs 库的fltk-sys模块依赖了库 cfltk 并指明了依赖的提交是 8a56507 甚至可以嵌套,毕竟库自身 ...

  3. ffmpeg -使用总结

    ffmpeg 使用总结,不定期更新 ---------------------------------------- 1. 将截图合成影片: ffmpeg -i ./shot/%d.tiff -thr ...

  4. SpringBoot可视化接口开发工具magic-api

    magic-api简介 magic-api是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口,无需定义Controller.Service ...

  5. 开源免费的专注于建立大型个人知识库推荐-Trilium Notes

    Trilium Notes是一个分层的笔记应用程序,专注于建立大型个人知识库. 支持相当丰富的 markdown,包括 mermaid 和 latex,而且即时渲染,和 typora 一样.支持代码类 ...

  6. 使用SVG做模型贴图的思路

    大多数情况下,三维模型使用PNG,JPG作为模型的贴图,当然为了性能优化,有时候也会使用压缩贴图来提高渲染效率和较少GPU压力. 今天提供一种新的思路,使用SVG作为模型的贴图,可以达到动态调整图片精 ...

  7. GitHub Star 数量前 12 的开源无代码工具

    相关文章:GitHub Star 数量前 15 的开源低代码项目 在本篇文章中,我们将探索 12 款在 GitHub 上星级排名前列的开源无代码工具. 每款工具都旨在简化和加速开发过程,但各自侧重于不 ...

  8. JAVA Spring Boot快速开始

    实践环境 Spring Boot 3.2.1 Maven 3.8.8 JDK 1.8.0_331 创建项目 通过http://start.spring.io/网站创建包含Spring Boot的项目, ...

  9. Vue 结合html2canvas和jsPDF实现html页面转pdf

    结合html2canvas和jsPDF实现html页面转pdf   By:授客 QQ:103355122   实践环境 win10   Vue 2.9.6 axios 0.18.0   html2ca ...

  10. c#写一个WINFORM的多线程操作

    以下是一个简单的示例,展示了如何在C# WinForms中创建一个按钮的异步事件,并使用Label控件来显示事件执行的时长. 首先,确保你已经在你的项目中添加了一个Button和一个Label控件.假 ...