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. centos7 升级sqlite3

    升级sqlite3 官网 点击 1.下载源码 wget https://www.sqlite.org/2019/sqlite-autoconf-3300100.tar.gz 2.解压,编译 .tar. ...

  2. Tunnel Warfare HDU - 1540

    #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> us ...

  3. CLion快捷键设置

    CLion自动格式化的快捷键默认为Ctrl+Alt+L,代码前后跳转CRTL+ALT+Left或CRTL+ALT+Right 但有时会和系统的快捷键冲突,需要修改CLion里面的快捷键 如图:sett ...

  4. go cap和len的区别

    首先要搞清楚容量和长度的区别:   容量是指底层数组的大小,长度指可以使用的大小   容量的用处在哪?在与当你用 appen d扩展长度时,如果新的长度小于容量,不会更换底层数组,否则,go 会新申请 ...

  5. C#中System.ServiceProgress报错

    场景 在C#中检索本地计算机所有服务时,使用 System.ServiceProcess.ServiceController[] services = System.ServiceProcess.Se ...

  6. 在eclipse中JS页面创建后<%@ page此处就马上就报错

    修改路径:右键点击创建的jsp页面--->Build Path--->Configure Build Path---> Libraries--->Add Libraries-- ...

  7. Spark学习之路 (二十八)分布式图计算系统[转]

    引言 在了解GraphX之前,需要先了解关于通用的分布式图计算框架的两个常见问题:图存储模式和图计算模式. 图存储模式 巨型图的存储总体上有边分割和点分割两种存储方式.2013年,GraphLab2. ...

  8. 嵊州D5T1 鸡翅 chicken

    鸡翅  chicken [问题描述] 小 x 非常喜欢小鸡翅. 他得知 NSC 超市为了吸引顾客,举行了如下的活动: 一旦有顾客在其他超市找到更便宜的小鸡翅, NSC 超市将免费送给顾客 1000g ...

  9. Git的精简用法

    作为一名开发人员,提交代码那是家常便饭,那如何有效地利用Git进行提交代码呢?在这里介绍一些常用.必要的命令,几乎够工作中使用了. (1)git pull 命令:拉取代码,这条命令没啥说的了,在提交代 ...

  10. babel配置文件.babelrc

    Babel是一个广泛应用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行.意味着可以使用ES6编写程序,而不用担心现有环境是否支持. Babel的配置文件是.babelrc,存放在项目的根 ...