linux实现diff命令代码,Linux中的9个'diff'命令示例

本文介绍Linux中的diff命令,用于比较两个文件或目录的内容差异。通过9个示例演示如何使用不同选项来定制输出格式,包括忽略大小写和空白等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux中的Diff命令用于逐行比较两个文件的内容,如果找到差异,则还会列出差异以及行号。Diff命令还可用于比较两个目录的内容。本文介绍了9个diff命令的使用示例。

diff命令的语法:

#diff file1 file2

diff命令的输出可以采用以下格式:

Normal (default)

Context

Unified

diff命令输出中使用的参数为:

-a 它表示已添加了一些内容

-c 表示某些文本已更改

-d 表示某些文本已被删除

默认情况下,diff命令输出为正常格式,这意味着当两个文件的内容相同时,将不会产生任何输出,但会得到提示。

在本文中,我们将通过不同的实际示例来学习Linux diff命令。

示例:1)用diff命令比较两个文件

假设我们有两个文件aachen.txt和sydney.txt,以下是这些文件的内容,

[root@linuxtechi ~]# cat aachen.txt

Linux Rocks in the open source world, followings are the linux distributions:

CentOS

Red Hat

Ubuntu Debian

Linux Mint

OpenSUSE

Fedora

[root@linuxtechi ~]# cat sydney.txt

Linux Rocks in the open source world, followings are the linux distributions:

CentOS

Red Hat

Ubuntu Debian

Linux Mint

OpenSUSE

Fedora

[root@linuxtechi ~]#

让我们使用diff命令比较这些文件的内容。

[root@linuxtechi〜]#diff aachen.txt sydney.txt

[root@linuxtechi〜]#

上面的输出确认两个文件相同。让我们在aachen.txt中进行一些更改,将开放源代码重写为“open-source”。

现在,重新运行diff命令。

[root@linuxtechi ~]# diff aachen.txt sydney.txt

输出:

d130e645ef696994a0c73b713206265d.png

在输出中,1c1表示需要更改第一个文件的第一行以使两个文件相同。

让我们回滚以上更改,并在文件末尾的sydeny.txt中添加新行“Arch Linux”,然后再次运行diff命令,

670367b0b2b6afb5ae6d03a63f22a422.png

diff命令“7a8”的输出表明,在第一个文件的第七行之后,我们需要添加另一行以匹配第二个文件的第八行。

让我们从sydney.txt中删除“ Arch Linux”和“ Fedora”,然后尝试比较这些文件,

0f5511ae9bdc2bc60fd9b874bb536f83.png

diff命令“ 7d6 ”的输出表明,我们需要删除第一个文件中的第7行以与第二个文件在行号6进行同步。

示例:2)以上下文格式(-c)输出Diff命令

在diff命令中使用“ -c”选项以上下文格式生成diff命令输出。示例如下所示,

[root@linuxtechi ~]# diff -c aachen.txt sydney.txt

900bafb16c19777bef133db90d23b81b.png

前两行表示文件名及其修改日期和时间,三个星号(“***”)表示第一个文件,三个连字符(“-”)表示第二个文件。

仅单个连字符“-”表示需要删除该行,加号“ +”表示需要在文件中添加该行。如果不需要任何更改的行,则以两个空格作为前缀。

示例:3)以统一格式(-u)输出Diff命令

如果要以统一格式生成其输出,请在diff命令中使用“ -u”选项,示例如下所示,

[root@linuxtechi ~]# diff -u aachen.txt sydney.txt

231a698938c90dc75bc2969158064c23.png

上面的输出有点类似于上下文格式,但是统一格式以简洁的方式显示了输出,这里的前两行表示文件名及其修改日期和时间。

三个连字符(“-”)表示第一个文件,三个加号(“ +++”)表示第二个文件,两个@符号“ -1,7”表示从第一个文件开始的行,“ + 1,7”表示行数从第二个文件开始。另外,符号(+ Core OS)表示需要在第一个文件中添加此行,符号连字符(-Fedora)表示需要从第一个文件中删除此行以使其与第二个文件相同。

示例:4)在比较文件时忽略大小写(-i)

默认情况下,diff命令区分大小写,如果要在diff命令中忽略大小写,则使用“ -i”选项,示例如下所示,

假设我们有两个文件的以下内容

7c3ff10f52f6046ec8d334a58e999c84.png

不带任何选项运行diff命令,

[root@linuxtechi ~]# diff aachen.txt sydney.txt

5,6c5,6

< Ubuntu debian

< Linux mint

---

> Ubuntu Debian

> Linux Mint

[root@linuxtechi ~]#

现在,使用-i选项运行diff命令,

[root@linuxtechi ~]# diff -i aachen.txt sydney.txt

[root@linuxtechi ~]#

从上面的输出中可以看到,当使用-i选项时,diff命令忽略了区分大小写的功能。

示例:5)报告文件与diff命令(-s)相同

在某些情况下,我们使用diff命令比较文件,如果内容相同,则我们希望显示消息文件相同,这可以通过在diff命令中传递“ -s”选项来实现,

[root@linuxtechi ~]# cat filex.txt

DevOPs Engineer

Cloud Stack Engineer

Linux System Admin

Monitoring Team

[root@linuxtechi ~]# cat filey.txt

DevOPs Engineer

Cloud Stack Engineer

Linux System Admin

Monitoring Team

[root@linuxtechi ~]# diff -s filex.txt filey.txt

Files filex.txt and filey.txt are identical

[root@linuxtechi ~]#

示例:6)与diff(-b)比较文件时忽略空白

假设我们有两个文件filea.txt和fileb.txt,其中空格不一致,因此,如果我们不带任何选项使用diff命令,即使内容相同,它也会显示空格差异,因此在这种情况下,我们可以使用-b选项忽略diff命令中不一致的空格,示例如下所示,

[root@linuxtechi ~]# cat filea.txt

Hi, LinuxTechi is a Linux based blog. It contains linux HowTo's and Tips & Tricks.

[root@linuxtechi ~]# cat fileb.txt

Hi, LinuxTechi is a Linux based blog. It contains linux HowTo's and Tips & Tricks.

[root@linuxtechi ~]#

使用diff命令比较没有任何选项的文件,

[root@linuxtechi ~]# diff filea.txt fileb.txt

1c1

< Hi, LinuxTechi is a Linux based blog. It contains linux HowTo's and Tips & Tricks.

---

> Hi, LinuxTechi is a Linux based blog. It contains linux HowTo's and Tips & Tricks.

[root@linuxtechi ~]#

现在在diff命令中使用-b选项

[root@linuxtechi ~]# diff -b filea.txt fileb.txt

[root@linuxtechi ~]#

如果要在使用diff命令进行比较时忽略所有空白,请使用“-w”选项

[root@linuxtechi ~]# diff -w filea.txt fileb.txt

示例:7)在比较期间忽略行末空白(-Z)

如果要在比较过程中忽略行尾的试行空间,请使用“-Z”选项

[root@linuxtechi ~]# diff -Z filea.txt fileb.txt

在比较命令中使用“-B”忽略比较中的所有空白行,

[root@linuxtechi ~]# diff -B filea.txt fileb.txt

示例:8)用diff命令比较两个目录

假设我们有两个名称分别为lab01和lab02的目录,它们具有以下文件和子目录

[root@linuxtechi ~]# ls -l lab01/

total 0

-rw-r--r--. 1 root root 0 Feb 1 17:49 filea.txt

-rw-r--r--. 1 root root 0 Feb 1 17:49 fileb.txt

-rw-r--r--. 1 root root 0 Feb 1 17:49 filec.txt

-rw-r--r--. 1 root root 0 Feb 1 17:49 filed.txt

drwxr-xr-x. 2 root root 23 Feb 1 17:50 sitea

[root@linuxtechi ~]# ls -l lab02/

total 0

-rw-r--r--. 1 root root 0 Feb 1 17:49 filea.txt

-rw-r--r--. 1 root root 0 Feb 1 17:49 fileb.txt

-rw-r--r--. 1 root root 0 Feb 1 17:49 filec.txt

-rw-r--r--. 1 root root 0 Feb 1 17:49 filed.txt

drwxr-xr-x. 2 root root 23 Feb 1 17:50 sitea

[root@linuxtechi ~]#

让我们使用下面的diff命令比较这两个目录,

[root@linuxtechi ~]# diff -qr lab01/ lab02/

[root@linuxtechi ~]#

-q-它指示diff命令仅在文件不同时才报告

-r它指示diff命令以递归方式查找子目录中的差异

当我们得到空白输出时,这意味着两个目录是相同的。让我们从lab02删除filed.txt,然后尝试进行比较。

[root@linuxtechi ~]# cd lab02/

[root@linuxtechi lab02]# rm -f filed.txt

[root@linuxtechi lab02]# cd

[root@linuxtechi ~]# diff -qr lab01/ lab02/

Only in lab01/: filed.txt

[root@linuxtechi ~]#

上面的输出显示filed.txt仅存在于lab01目录中

示例:9)将diff命令输出重定向到文件

可以使用符号“>”将Diff命令输出重定向到文件。它仅在diff命令的输出包含差异时才需要执行任务的Shell脚本中非常有用。

[root@linuxtechi ~]# diff aachen.txt sydney.txt

9,10d8

< SLES

< Puppy Linux

[root@linuxtechi ~]# diff aachen.txt sydney.txt > diff.txt

[root@linuxtechi ~]# cat diff.txt

9,10d8

< SLES

< Puppy Linux

[root@linuxtechi ~]#

以上全部来自本文,希望现在通过上述示例,您对diff命令有更好的了解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值