Linux - Shell - diff
概述
- linux diff 命令
背景
- 一个 比较文本差异 的工具
- 老实说, 之前 git/gitlab 上比较代码差异, 我是有点懵逼的
- diff 命令, 可以作为理解这些东西的基础
- diff 命令很实用
- 支持多种比较对象
- 文本
- 目录
- 标准输入
- 今天只讲文本, 因为其他的还不会
- 支持多种比较对象
- diff 命令很实用
- 学会了, 可以有很多场景, 稳赚不赔啊
- diff
- vimdiff
- git
- gitlab
- svn
环境
- os
- centos7
- os
思路
- 基础的比较
- 命令怎么用
- 命令结果
- 慢慢的拓展
- 各个参数的使用
- 总结
- 参数
- 基础的比较
1. 基础: 最简命令与参数
概述
- 简述 diff 的基本思路
思路
两个参数
- 作为一个 用来比较 的命令, 通常会需要 两个对象
- 比如各种广告
- 植发前, 植发后, 效果一下, 就出来了
- 比如各种广告
- 作为一个 用来比较 的命令, 通常会需要 两个对象
参照
- 找不同
- 比较的目的, 肯定是为了 找不同
- 这个还是比较简单, 只要把不同的地方圈出来, 就可以了
- 描述不同
- 如果想要比较清晰的描述不同, 那么就需要一个参照
- 植发广告的参照, 大家默认都是 植发前
- 你看那个秃子, 植发了之后, 多了多少头发
- 植发前, 就是基准
- 这样的结果, 就是描述起来, 会清晰很多
- 植发广告的参照, 大家默认都是 植发前
- 如果想要比较清晰的描述不同, 那么就需要一个参照
- diff
- 参数
- 文本1
- 参照
- 文本2
- 变化
- 以 文本1 为基础
- 所有的不同和变化, 都作为 文本1的变化 为准来描述
- 变化
- 文本1
- 参数
- 找不同
命令
格式
# doc1 是基准
# doc2 是相对 doc1 的变化
> diff [-option] <doc1> <doc2>
2. 场景1: 两个文本一模一样
概述
- 场景, 没有变化
命令
# 1. 假设文本叫 note
> diff note note
结果
- 不会有任何输出
- 这是一个简单但又必须知道的场景
- 如果不信, 可以在 参数前加上 -y 的选项
- 不会有任何输出
3. 场景2: 变化 - 变化
概述
- 比较简单的变化
文本
note1
1
2
3
4
5
6
7
8
9
0
note2
10
2
30
40
50
6
70
71
72
8
90
命令
> diff note1 note2
结果
# 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: 变化 - 添加
概述
- 稍微麻烦点的变化
- 主要是 不好理解
文本
note1
1
2
3
4
5
note2
1
10
2
3
4
40
41
42
5
51
命令
> diff note1 note2
结果
# 为了变成 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: 变化 - 删除
概述
- 稍微麻烦点的变化
- 主要是 不好理解
文本
note1
1
10
2
3
4
40
41
42
5
51
note2
1
2
3
4
5
命令
# 也可以直接用上一个场景的文件, 命令是 diff note2 note1
> diff note1 note2
结果
# 为了变成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
命令
# 还可以加 选项 -W <宽度> 来调整宽度
> diff -y note1 note2
结果
# | 两边有不同
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 输出
概述
- 另一种 style, 但我不知道它叫什么
文本
- 同 场景1
命令
> diff -c note1 note2
结果
*** 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 输出
概述
- 另一种 style, 但我不知道它叫什么
文本
- 同 场景1
命令
> diff -u note1 note2
结果
# 感觉并不是很友好的样子
--- 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
ref
后续
- git diff
- vimdiff
- 其他
感觉
- 其实 diff 的知识点不多
- 但是为啥我两句三句, 就扯了这么长一篇?
- 但愿能成功入门吧
- 其实 diff 的知识点不多
Linux - Shell - diff的更多相关文章
- 老李分享:《Linux Shell脚本攻略》 要点(一)
老李分享:<Linux Shell脚本攻略> 要点(一) 第一章:Shell起步基础 1.变量:在bash中,每一个变量的值都是字符串.无论你给变量赋值时,有没有使用引号,值都会以字符 ...
- Linux Shell常用shell命令
Linux Shell常用shell命令 一.文件.目录操作命令 1.ls命令 功能:显示文件和目录的信息 ls 以默认方式显示当前目录文件列表 ls -a 显示所有文件包括隐藏文件 ls -l 显示 ...
- 《Linux Shell 脚本攻略》读书笔记
本书主要讲解一些linux shell命令的用法,讲解一些shell的奇技淫巧. 第一章 小试牛刀 主要介绍一些基本shell指令 终端打印:echo.printf 别名:alias 终端处理工具:t ...
- linux shell脚本攻略笔记
前一阵子系统学习了下<linux shell脚本攻略>这本书.在此记录下自己的学习笔记 1. 输出颜色字符 echo -e "\e[1:41m" 1表示背景色 2 ...
- Linux Shell编程与编辑器使用详解
<Linux Shell编程与编辑器使用详解> 基本信息 作者: 刘丽霞 杨宇 出版社:电子工业出版社 ISBN:9787121207174 上架时间:2013-7-22 出版日期:201 ...
- LINUX SHELL脚本攻略笔记[速查]
Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgrep shell数学运算 命令状态 文件描述 ...
- linux shell 中的sleep命令
开始还以为是这样的语法: sleep(1), 后面发现是: linux shell 中的sleep命令 分类: LINUX 在有的shell(比如linux中的bash)中sleep还支持睡眠(分,小 ...
- Linux shell脚本编程(三)
Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...
- Linux shell脚本编程(二)
Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...
随机推荐
- [更新ing]zzy的家里蹲网课日记
前言 精神小(ge)伙(zi)终于记起了他的博客密码...... 寒假以来,积累了巨多的好想法想要写博客,往往都是因为各种原因半途而废--在学习生活上甚至也有各种拖延的毛病:爱欠作业不早睡,不见成绩不 ...
- day 12 函数
函数 函数的定义和调用 def 函数名(形参): 函数体 return 返回值 调用 函数名(实参) 站在形参的角度上: 位置参数, *args, 默认参数(陷阱), 关键字参数, **kwargs ...
- 洛谷P4526 【模板】自适应辛普森法2
P4526 [模板]自适应辛普森法2 洛谷传送门 题目描述 计算积分 保留至小数点后5位.若积分发散,请输出"orz". 输入格式 一行,包含一个实数,为a的值 输出格式 一行,积 ...
- 剑指offer-面试题39-数组中出现次数超过一半的数字-抵消法
/* 题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输 ...
- BZOJ #2506. calc [根号分治,莫队,二分]
\(p\) 是个正常范围, \(\sqrt p <= 100\) 比较小,预处理出来 \(a_i % p == k\) 的位置,然后丢进去,最后询问的 \(p\) 如果大于 \(100\) 就莫 ...
- PHP中根据二维数组中某个字段实现排序
想要实现二维数组中根据某个字段排序,一般可以通过数组循环对比的方式实现.这里介绍一种更简单的方法,直接通过PHP函数实现.array_multisort() :可以用来一次对多个数组进行排序,或者根据 ...
- JavaSE学习笔记(6)---异常
JavaSE学习笔记(6)---异常 软件程序在运行过程中,非常可能遇到问题,我们称之为异常,英文是:Exception,意思是例外.遇到这些例外情况,或者叫异常,我们怎么让写的程序做出合理的处理 ...
- 关于SSHkey的问题
这两天开始在办公室和家来回考代码,才感觉需要学习Git了.先在Github上注册账户,建立仓库.在执行git clone回本地时,出现错误: git@github.com: Permission de ...
- 安装Bind到CentOS(YUM)
运行环境 系统版本:CentOS Linux release 7.3.1611 (Core) 软件版本:Bind-x 硬件要求:无 安装过程 1.配置YUM源 [root@localhost ~]# ...
- 在RYU中实现交换机的功能
首先源码,解析部分如下,同时可以参考RYU_BOOK上的解释说明 原文链接参考:https://blog.csdn.net/qq_34099967/article/details/89047741 ...