你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

介绍一些Linux下 diff 命令的用法

[复制链接]
gaosmile 发布时间:2020-7-9 12:05

我们在平时工作的时候,经常要知道两个文件之间,以及同个文件不同版本之间有何异同点。在 Windows 下,有 beyond compare 这个好用的工具,而在 Linux 下,也有很多很强大的工具,良许之前也写过一篇文章介绍:

Linux下9种优秀的代码比对工具推荐

这些比对工具其实都是基于 diff 命令,下面就详细介绍一些 diff 命令的用法。

diff 命令是一个分析文件信息的命令,可以打印出文件之间的差异。它可以逐行地比较两个文件的内容,也可以递归地比较文件夹的内容。diff 命令的输出内容可以让我们知道要使两个文件相同需要做哪些修改,这对于我们的工作很有帮助。

在开始前,我们先用文件编辑器创建两个内容相同的文件。这里我们使用的是 nano 。

  • $ nano diffsample1
      `1 m9 a1 n* C2 q3 W* {

输入内容:

发布

优质的

技术文章

微信图片_20200709120307.png

使用 Ctrl+X 和 Y 保存并退出。

创建第二个文件:

  • $ nano diffsample2( A$ e/ }/ K. i8 j

输入同样的内容并保存退出。

需要注意的是,空格和 Tab 对两个文件是否完全相同会有影响。

使用 diff 命令查看两个文件是否有差异:

  • $ diff diffsample1 diffsample2
    / K  z+ @/ J; F5 }: {: D  g2 a( W

这时 diff 命令没有输出任何信息,说明这两个文件的内容是完全相同的。

现在我们对 diffsample2 做一些修改,将文章改为帖子然后保存并退出

微信图片_20200709120310.png

再使用 diff 命令:

  • $ diff diffsample1 diffsample2% C8 a& g. ?/ Q$ P

查看输出的信息:

微信图片_20200709120314.png

在以上输出信息中,3c3 表示第一个文件的第三行需要被替换为第二个文件的第三行,然后为我们提示出了需要修改的内容: 技术文章 和 技术帖子

diff 命令所参考的不是第一个文件,而是第二个文件,它的输出信息有以下几种字符:

c : 表示必须做一些修改

a : 表示必须添加一些内容

d : 表示必须删除一些内容

字符前的数字表示第一个文件中的行数,字符后的内容表示第二个文件中的行数。

< 表示引用的第一个文件中的内容,而 > 表示引用的第一个文件中的内容

现在让我们交换两个文件的顺序再试试:

  • $ diff diffsample2 diffsample1. P" q) W) V/ b0 [0 r  U
微信图片_20200709120318.png
. p$ u9 V( F7 }1 @

在交换文件顺序之后 diff 参考的文件变成了 diffsample1,提示我们将 技术帖子 修改为 技术文章 。

现在我们将 diffsample1 编辑为以下内容:

微信图片_20200709120320.png

删除了第二行和第三行,再试试使用 diff 命令

  • $ diff diffsample2 diffsample1
    # Q% U7 A  I* _" G4 J* W
微信图片_20200709120323.png * A9 {) A' `. U* F

现在我们可以看到,因为我们以 diffsample1 作为参考,为了使两个文件相同,我们需要删除 diffsample2 中的第二行和第三行,然后就会和 diffsample1 中的第一行内容相同。

我们再试试交换 diffsample1 和 diffsample2 的顺序:

  • $ diff diffsample1 diffsample2# j9 I; Q0 T( d, U0 [( @
微信图片_20200709120326.png
# J1 S4 `' H* T

可以看到,现在 diff 给我们的提示信息变为了在 diffsample1 中的第一行后面添加 diffsample2 中的第二行和第三行内容。

现在让我们来测试区分内容的大小写:

编辑 diffsample1 的内容为:

微信图片_20200709120329.png

编辑 diffsample1 的内容为:

微信图片_20200709120332.png

两个文件中唯一的区别是第三行的大小写,再试试 diff 命令

  • $ diff diffsample1 diffsample2
    9 v2 M( |5 k3 w- r. t4 I
微信图片_20200709120335.png " C  q  m3 I6 \) i. l

可以看到 diff 命令找出了大小写的不同,如果我们不想检查大小写,可以使用 -i 选项。

  • $ diff -i diffsample1 diffsample2& i2 j+ g( Z" g' v% z. V

这时内容没有区别,diff 没有输出任何信息。

我们可以使用 -u 选项以统一的格式输出信息:

微信图片_20200709120337.png

输出信息中使用 - 和 + 表示哪些内容需要被删除或者添加来使得文件内容相同。

之前提到过 diff 命令会检查空格或tab,如果我们想要忽略空格和tab,可以使用 -w 选项。

在 diffsample2 的第二行 good 后面输入一些空格和tab,并把之前的大写改回小写。

微信图片_20200709120340.png

再使用 diff 命令

  • $ diff diffsample1 diffsample2- H* s3 S) r$ h( H
微信图片_20200709120343.png
: S. U2 [4 z- }8 h& X& k

可以看到找出了不同,再使用 -w 忽略空格和tab,这时便没有任何输出信息了。

diff 命令还有许多选项,可以用来忽略某些情况或者更改输出等,我们可以使用 man 命令来获取更多的相关信息。

) w5 ^, r& @, I; Q. O# p- K
赞 收藏 评论0 发布时间:2020-7-9 12:05

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版