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基础语法】第1天作业练习题

    # 1.下面那些不能作为标识符? """ 1.find 2. _num 3.7val 4.add. 5.def 6.pan 7.-print 8.open_file 9. ...

  2. Flex布局如何实现最后一个元素右对齐,或者第一个元素左对齐

    先来看看一个例子 在一个div我们把四个按钮全部放到右边去了,看下效果↓ 这个时候我们想把第一个按钮左对齐,其他保持不变 这时候我们来个第一个按钮样式上加上 :margin-right: auto; ...

  3. java学习笔记之IO编程—字节流和字符流

    1. 流的基本概念 在java.io包里面File类是唯一一个与文件本身有关的程序处理类,但是File只能够操作文件本身而不能操作文件的内容,或者说在实际的开发之中IO操作的核心意义在于:输入与输出操 ...

  4. centos python虚拟环境安装

    pip install virtualenv pip install virtualenvwrapper vim ~/.barshrc export VIRTUALENVWRAPPER_PYTHON= ...

  5. Spark性能优化指南——初级篇

    原文来我的公众号:Spark性能优化指南——初级篇 一. Spark作业原理 我们使用spark-submit提交一个Spark作业之后,这个作业就会启动一个对应的Driver进程.该进程是向集群管理 ...

  6. Python第三方库requests的编码问题

    PS:这个解决方法可能很简单,但是这是平时的一些细节问题,所以有必要提醒一下! 首先代码不多,就是通过get方法去获取豆瓣首页信息,如图:但是会报UnicodeEncodeError: 'gbk' c ...

  7. 0012 基于DRF框架开发(04 序列化器的字段与选项)

    1 常用字段类型 字段 构造方式 BooleanField BooleanField() NullBooleanField NullBooleanField() CharField CharField ...

  8. Python中BaseException和Exception的区别

    BaseException 是 Exception 的父类,作为子类的Exception无法截获父类BaseException类型的错误 BaseException: 包含所有built-in exc ...

  9. collection和map集合类知识点总结

    collection和map集合类知识点总结 最近在准备java基础知识的总结,发现对于集合类的知识点很多很杂,借鉴网上的帖子,整理如下. 一.定义 集合框架是为表示和操作集合而规定的一种统一的标准的 ...

  10. JAVA鼠标监听器

    package howework_07; public class Example9_10 { public static void main(String args[]) { WindowMouse ...