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. 消息总线:Spring Cloud Stream

    最近在学习Spring Cloud的知识,现将消息总线:Spring Cloud Stream 的相关知识笔记整理如下.[采用 oneNote格式排版]

  2. C#设计模式学习笔记:(4)建造者模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7614630.html,记录一下学习过程以备后续查用. 一.引言 在现实生活中,我们经常会遇到一些构成比较复杂 ...

  3. 【笔记】机器学习 - 李宏毅 - 3 - Bias & Variance

    A more complex model does not always lead to better performance on testing data. Because error due t ...

  4. contos7命令行访问网址

    1.curl访问: 例子: curl http://www.baidu.com 注意:这种访问只会直接读取网站HTML代码出来 2.elinks访问: yum -y install elinks  : ...

  5. spawn id exp6 not open

    原因 脚本没有被执行 解决方案 手动执行该条命令参看报错的原因

  6. sip 常见问题和总结

    1. 加入课堂,成功后,会返回在sdp中会返回所有流媒体的信息?2. 切换镜头 客户端自动切换推流数据 其他不变? * EXOSIP_CALL_REINVITE 底层是怎么区分出来的? * 注册时,4 ...

  7. JN_0013:win10快速回桌面

    4.最后一种方法是最为实用的方法.按快捷键[windows键+D键],如下图所示,两键同时按,或者先按住windows键不放再按D键.这种方法在任何时候都是有用的,并且熟练使用后可以达到非常快的速度: ...

  8. ECMAScript基本对象——Number 对象

    Number 对象,原始数值的包装对象. 1.创建 var num = new Number(value); 2.方法 toExponential(x)把对象的值转换为指数计数法. toFixed(x ...

  9. 嵊州D2T4 十七个中毒的英国人 poisoning

    嵊州D2T4 十七个中毒的英国人 poisoning 利内罗女士准备来到意大利进行修行. 意大利由 n 个城市和 m 条道路构成,道路是双向的. 到达第 i 个城市时,她可以取得该城市的全部信仰,并获 ...

  10. 开学第一课Java考试

    package moguiba;import java.text.DecimalFormat;import java.util.Scanner;import moguiba.ScoreInformat ...