1. 概述

    1. linux diff 命令
  2. 背景

    1. 一个 比较文本差异 的工具
    2. 老实说, 之前 git/gitlab 上比较代码差异, 我是有点懵逼的
    3. diff 命令, 可以作为理解这些东西的基础
      1. diff 命令很实用

        1. 支持多种比较对象

          1. 文本
          2. 目录
          3. 标准输入
          4. 今天只讲文本, 因为其他的还不会
    4. 学会了, 可以有很多场景, 稳赚不赔啊
      1. diff
      2. vimdiff
      3. git
      4. gitlab
      5. svn
  3. 环境

    1. os

      1. centos7
  4. 思路

    1. 基础的比较

      1. 命令怎么用
      2. 命令结果
    2. 慢慢的拓展
      1. 各个参数的使用
    3. 总结
      1. 参数

1. 基础: 最简命令与参数

  1. 概述

    1. 简述 diff 的基本思路
  2. 思路

    1. 两个参数

      1. 作为一个 用来比较 的命令, 通常会需要 两个对象

        1. 比如各种广告

          1. 植发前, 植发后, 效果一下, 就出来了
    2. 参照

      1. 找不同

        1. 比较的目的, 肯定是为了 找不同
        2. 这个还是比较简单, 只要把不同的地方圈出来, 就可以了
      2. 描述不同
        1. 如果想要比较清晰的描述不同, 那么就需要一个参照

          1. 植发广告的参照, 大家默认都是 植发前

            1. 你看那个秃子, 植发了之后, 多了多少头发
            2. 植发前, 就是基准
            3. 这样的结果, 就是描述起来, 会清晰很多
      3. diff
        1. 参数

          1. 文本1

            1. 参照
          2. 文本2
            1. 变化

              1. 以 文本1 为基础
              2. 所有的不同和变化, 都作为 文本1的变化 为准来描述
  3. 命令

    1. 格式

      # doc1 是基准
      # doc2 是相对 doc1 的变化
      > diff [-option] <doc1> <doc2>

2. 场景1: 两个文本一模一样

  1. 概述

    1. 场景, 没有变化
  2. 命令

    # 1. 假设文本叫 note
    > diff note note
  3. 结果

    1. 不会有任何输出

      1. 这是一个简单但又必须知道的场景
      2. 如果不信, 可以在 参数前加上 -y 的选项

3. 场景2: 变化 - 变化

  1. 概述

    1. 比较简单的变化
  2. 文本

    1. note1

      1
      2
      3
      4
      5
      6
      7
      8
      9
      0
    2. note2

      10
      2
      30
      40
      50
      6
      70
      71
      72
      8
      90
  3. 命令

    > diff note1 note2
  4. 结果

    # 1. 1c1: note1 的 第1行, 经过了 修改, 变成了 note2 的 第1行
    1c1
    # < 开头, 是 note1 的内容
    < 1
    # --- 华丽的分割线
    ---
    # > 开头, 是 note2 的内容
    > 10
    # 2. 3,5c3,5: note1 的 3到5行, 改成了 note2 的 3到5行
    3,5c3,5
    < 3
    < 4
    < 5
    ---
    > 30
    > 40
    > 50
    # 3. 7c7,9: note1 的 7 行, 改成了 note2 的 7到9行
    7c7,9
    < 7
    ---
    > 70
    > 71
    > 72
    # 4. 9,10c11: note1 的 9到10行, 改成了 note2 的 11行
    9,10c11
    < 9
    < 0
    ---
    > 90
    # 5. 还会有 左右 不对称 的 多对多, 我就不讲了, 大家应该能够理解

4. 场景3: 变化 - 添加

  1. 概述

    1. 稍微麻烦点的变化
    2. 主要是 不好理解
  2. 文本

    1. note1

      1
      2
      3
      4
      5
    2. note2

      1
      10
      2
      3
      4
      40
      41
      42
      5
      51
  3. 命令

    > diff note1 note2
  4. 结果

    # 为了变成 note2, note1 的 第1行 后面, 添加了内容, 对应 note2 的 第2行
    1a2
    # 为了变成 note2, note2 里添加的内容
    > 10
    # 为了变成 note2, note1 的 第4行 后面, 添加了内容, 对应 note2 的 第6到8行
    4a6,8
    > 40
    > 41
    > 42
    # 为了变成 note2, note1 的 第5行 后面, 添加了内容, 对应 note2 的 第10行
    5a10
    > 51

5. 场景4: 变化 - 删除

  1. 概述

    1. 稍微麻烦点的变化
    2. 主要是 不好理解
  2. 文本

    1. note1

      1
      10
      2
      3
      4
      40
      41
      42
      5
      51
    2. note2

      1
      2
      3
      4
      5
  3. 命令

    # 也可以直接用上一个场景的文件, 命令是 diff note2 note1
    > diff note1 note2
  4. 结果

    # 为了变成note2, note1 的 第2行 被删除了, 被删除的行, 本该在 note2 第1行 的后面
    2d1
    < 10
    # 为了变成note2, note1 的 第6到8行 被删除了, 被删除的行, 本该在 note2 第4行 的后面
    6,8d4
    < 40
    < 41
    < 42
    # 为了变成note2, note1 的 第10行 被删除了, 被删除的行, 本该在 note2 第5行 的后面
    10d5
    < 51

6. 场景5: 并列模式

  1. 概述

    1. 并列展示内容
  2. 文本

    1. 同 场景1
  3. 命令

    # 还可以加 选项 -W <宽度> 来调整宽度
    > diff -y note1 note2
  4. 结果

    # | 两边有不同
    1 | 10
    2 2
    3 | 30
    4 | 40
    5 | 50
    6 6
    7 | 70
    # > 只有 note2 有的内容
    > 71
    > 72
    8 8
    9 | 90
    # < 只有 note1 有的内容
    0 <

7. 场景6: -c 输出

  1. 概述

    1. 另一种 style, 但我不知道它叫什么
  2. 文本

    1. 同 场景1
  3. 命令

    > diff -c note1 note2
  4. 结果

    *** note1	2020-01-12 00:32:18.418000000 +0800
    --- note2 2020-01-12 00:32:24.255000000 +0800
    ***************
    *** 1,10 ****
    ! 1
    2
    ! 3
    ! 4
    ! 5
    6
    ! 7
    8
    ! 9
    ! 0
    --- 1,11 ----
    ! 10
    2
    ! 30
    ! 40
    ! 50
    6
    ! 70
    ! 71
    ! 72
    8
    ! 90

8. 场景7: -u 输出

  1. 概述

    1. 另一种 style, 但我不知道它叫什么
  2. 文本

    1. 同 场景1
  3. 命令

    > diff -u note1 note2
  4. 结果

    # 感觉并不是很友好的样子
    --- note1 2020-01-12 00:32:18.418000000 +0800
    +++ note2 2020-01-12 00:32:24.255000000 +0800
    @@ -1,10 +1,11 @@
    -1
    +10
    2
    -3
    -4
    -5
    +30
    +40
    +50
    6
    -7
    +70
    +71
    +72
    8
    -9
    -0
    +90

ps

  1. ref

    1. Linux diff command
    2. Linux命令之diff
  2. 后续

    1. git diff
    2. vimdiff
    3. 其他
  3. 感觉

    1. 其实 diff 的知识点不多

      1. 但是为啥我两句三句, 就扯了这么长一篇?
      2. 但愿能成功入门吧

Linux - Shell - diff的更多相关文章

  1. 老李分享:《Linux Shell脚本攻略》 要点(一)

    老李分享:<Linux Shell脚本攻略> 要点(一)   第一章:Shell起步基础 1.变量:在bash中,每一个变量的值都是字符串.无论你给变量赋值时,有没有使用引号,值都会以字符 ...

  2. Linux Shell常用shell命令

    Linux Shell常用shell命令 一.文件.目录操作命令 1.ls命令 功能:显示文件和目录的信息 ls 以默认方式显示当前目录文件列表 ls -a 显示所有文件包括隐藏文件 ls -l 显示 ...

  3. 《Linux Shell 脚本攻略》读书笔记

    本书主要讲解一些linux shell命令的用法,讲解一些shell的奇技淫巧. 第一章 小试牛刀 主要介绍一些基本shell指令 终端打印:echo.printf 别名:alias 终端处理工具:t ...

  4. linux shell脚本攻略笔记

    前一阵子系统学习了下<linux shell脚本攻略>这本书.在此记录下自己的学习笔记 1. 输出颜色字符  echo -e "\e[1:41m" 1表示背景色   2 ...

  5. Linux Shell编程与编辑器使用详解

    <Linux Shell编程与编辑器使用详解> 基本信息 作者: 刘丽霞 杨宇 出版社:电子工业出版社 ISBN:9787121207174 上架时间:2013-7-22 出版日期:201 ...

  6. LINUX SHELL脚本攻略笔记[速查]

    Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgrep shell数学运算 命令状态 文件描述 ...

  7. linux shell 中的sleep命令

    开始还以为是这样的语法: sleep(1), 后面发现是: linux shell 中的sleep命令 分类: LINUX 在有的shell(比如linux中的bash)中sleep还支持睡眠(分,小 ...

  8. Linux shell脚本编程(三)

    Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...

  9. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

随机推荐

  1. python生日贺卡制作以及细节问题的解决最后把python项目发布为exe可执行程序过程

    自己今天第一次做一个python生日贺卡: 效果图 参考之前有位大佬的作品,自己稍微的改造了一下下  首先:上程序 Birthday.py """ ----------- ...

  2. Vue(八)---组件(Component)

    组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码. 注册一个全局组件语法格式如下: Vue.component(tagName, optio ...

  3. 《趣谈 Linux 操作系统》学习笔记(一):为什么要学 Linux 及学习路径

    前言:学习的课程来自极客时间的专栏<趣谈 Linux 操作系统>,作者用形象化的比喻和丰富的图片让课程变得比较易懂,为了避免知识看过就忘,打算通过写学习笔记的形式记录自己的学习过程. Li ...

  4. windows 2008r2+php5.6.28搭建详细过程

    安装IIS7 1.打开服务器管理器(开始-计算机-右键-管理-也可以打开),添加角色 直接下一步 勾选Web服务器(IIS),下一步,有个注意事项继续下一步(这里我就不截图了) 勾选ASP.NET会弹 ...

  5. qt creator源码全方面分析(2-4)

    目录 Qt Creator API Reference 库 核心库 其他库 插件 Qt Creator API Reference Qt Creator的核心基本上只是一个插件加载器.所有功能都在插件 ...

  6. composer封装dd函数

    1.安装composer,本人用的phpstudy,打开php扩展php_openssl 2.切换到www目录下 cmd 命令 composer 第一个就是我们要找的 3.运行composer req ...

  7. JavaSE学习笔记(4)---抽象类和接口

    JavaSE学习笔记(4)---抽象类和接口 抽象方法和抽象类 ·抽象方法 使用abstract修饰的方法,没有方法体,只有声明.定义的是一种"规范",就是告诉子类必须要给抽象方法 ...

  8. Python之pptx实现添加内容与删除(移动)页操作

    问题背景 大量表格数据需要生成指定格式的ppt文件,内容以文字和表格为主,首尾页与内容有固定格式.博主不熟悉VBA操作,希望通过模板用Python完成自动化. 基本思路 使用xlrd模块读取xlsx文 ...

  9. Java8新特性一览表

    总览 forEach() method in Iterable interface(Iterable接口中的forEach()方法) default and static methods in Int ...

  10. mysql 视图、触发器、事务、存储过程、函数

    一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...