Linux下diff命令用法详解

大家好,我是良许。

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

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

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

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

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

$ nano diffsample1

输入内容:

发布

优质的

技术文章

使用 Ctrl+XY 保存并退出。

创建第二个文件:

$ nano diffsample2

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

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

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

$ diff diffsample1 diffsample2

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

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

再使用 diff 命令:

$ diff diffsample1 diffsample2

查看输出的信息:

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

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

c : 表示必须做一些修改

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

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

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

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

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

$ diff diffsample2 diffsample1

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

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

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

$ diff diffsample2 diffsample1

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

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

$ diff diffsample1 diffsample2

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

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

编辑 diffsample1 的内容为:

编辑 diffsample1 的内容为:

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

$ diff diffsample1 diffsample2

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

$ diff -i diffsample1 diffsample2

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

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

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

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

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

再使用 diff 命令

$ diff diffsample1 diffsample2

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

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

最后,最近很多小伙伴找我要Linux学习路线图,于是我根据自己的经验,利用业余时间熬夜肝了一个月,整理了一份电子书。无论你是面试还是自我提升,相信都会对你有帮助!目录如下:

免费送给大家,只求大家金指给我点个赞!

电子书 | Linux开发学习路线图

也希望有小伙伴能加入我,把这份电子书做得更完美!

有收获?希望老铁们来个三连击,给更多的人看到这篇文章

推荐阅读:

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: diff命令Linux系统中用于比较两个文件或目录之间差异的工具。它可以显示两个文件之间的不同之处,包括添加、删除和修改的行。diff命令输出结果包括两个文件的差异,以及它们之间的行号和内容。 diff命令输出结果通常以“<”和“>”符号表示两个文件之间的不同之处。其中,“<”表示第一个文件中的内容,而“>”表示第二个文件中的内容。如果两个文件之间没有差异,则diff命令不会输出任何内容。 diff命令还可以用于比较目录之间的差异。在这种情况下,它会递归地比较目录中的所有文件,并显示它们之间的差异。如果两个目录之间没有差异,则diff命令不会输出任何内容。 总之,diff命令是一个非常有用的工具,可以帮助用户比较文件和目录之间的差异,从而更好地管理和维护系统中的文件。 ### 回答2: Linux中的diff命令是一个非常常用的命令,它主要用于比较两个文件的差异,其中一个文件称为原始文件(源文件),另一个文件称为目标文件(目标文件)。diff命令还可以用来比较目录下的不同文件,甚至可以比较文件夹之间的差异。 使用diff命令时,会输出如下格式的结果: 1. 左侧显示该行存在于源文件但不存在于目标文件的行的行号或缺省符号。 2. 右侧显示该行存在于目标文件但不存在于源文件的行的行号或缺省符号。 3. 如果行存在于两个文件中,会用“|”符号连接两行,并标注在左边文件中的行号或缺省符号。 比较结果的行号用两个数字表示,例如:1,3表示第一行到第三行;而数字后面的单词都是命令行参数,下面我们来看几个例子: 1. diff file1 file2 这条命令会比较文件file1和file2的差异,并输出两个文件中不同的内容。 2. diff -U 3 file1 file2 这条命令会比较文件file1和file2的差异,并以统一的格式输出,其中-U 3表示输出上下3行的差异内容。 3. diff -r dir1 dir2 这条命令会比较目录dir1和dir2中所有不同的文件,并输出所有差异的内容。 除了以上例子中的命令参数以外,diff命令还有很多其它的参数。例如,-c参数指定输出差异内容时,输出更详细的上下文信息;-i参数忽略大小写;-b参数忽略空格等等。 总结来说,diff命令是一个非常实用的命令,对于文件内容的比较和合并都是非常有帮助的,是Linux系统中文件管理操作不可缺少的工具之一。掌握好diff的使用方法,可以提高工作效率,同时也为后续操作提供更好的基础。 ### 回答3: diff命令Linux操作系统中的一个文件比较工具,用于比较两个文件的不同之处,输出它们之间的差异。这个命令一般用来比较文本文件。 diff命令会自动比较两个文件的内容,如果两个文件是一样的,那么diff命令将不会产生任何输出。如果两个文件有差异,那么diff命令会生成一个包含这些差异信息的报告。这个报告会显示出两个文件的差异之处,并且也会显示出需要进行的修改和编辑操作。 diff命令在默认情况下会将文件的改动以行为单位展示出来。比较的过程中如果发现相同的部分,会用“=”,不同的部分会用“<”和“>”进行标注,分别代表第一和第二个文件。 diff命令常用参数: -d:将比较的操作从行修改为以单词为单位。 -c:产生基于文本格式的文件对比结果 -u:与-c类似,然而输出文件中流行的是一种基于文本格式的 “Junkbuster”代码(第一行以”—”起始,第二行以”+++”起始)。 -r:对目录进行递归比较。 -q:仅输出是否有差异。 -b:忽略行末的空格。 -w:忽略全部的空格。 -i:忽略大小写的差异。 -y:在终端输出两个文件的对比情况,以使对比结果更易读。 总而言之,Linux中的diff命令输出结果详细描述了两个文件之间的详细比较差异,通过使用不同的参数,用户可以灵活地选择比较方式和输出的格式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

良许Linux

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值