Linux使用diff命令怎么比较文件

Linux使用diff命令怎么比较文件,第1张

Y:diff命令

●简介

★diff命令用于比较文件的差异。

★diff以逐行的方式,比较文本文件的异同处。如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录。

●语法

★命令格式:diff[参数][文件1或目录1][文件2或目录2]

★参数:

☆-<行数> 指定要显示多少行的文本。此参数必须与-c或-u参数一并使用。

☆-a或--text  diff预设只会逐行比较文本文件。

☆-b或--ignore-space-change  不检查空格字符的不同。

☆-B或--ignore-blank-lines  不检查空白行。

☆-c  显示全部内文,并标出不同之处。

☆-C<行数>或--context<行数> 与执行"-c-<行数>"指令相同。

☆-d或--minimal  使用不同的演算法,以较小的单位来做比较。

☆-D<巨集名称>或ifdef<巨集名称> 此参数的输出格式可用于前置处理器巨集。

☆-e或--ed  此参数的输出格式可用于ed的script文件。

☆-f或-forward-ed  输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处。

☆-H或--speed-large-files  比较大文件时,可加快速度。

☆-l<字符或字符串>或--ignore-matching-lines<字符或字符串> 若两个文件在某几行有所不同,而这几行同时都包含了选项中指定的字符或字符串,则不显示这两个文件的差异。

☆-i或--ignore-case  不检查大小写的不同。

☆-l或--paginate  将结果交由pr程序来分页。

☆-n或--rcs  将比较结果以RCS的格式来显示。

☆-N或--new-file  在比较目录时,若文件A仅出现在某个目录中,预设会显示:

☆Only in目录:文件A若使用-N参数,则diff会将文件A与一个空白的文件比较。

☆-p  若比较的文件为C语言的程序码文件时,显示差异所在的函数名称。

☆-P或--unidirectional-new-file  与-N类似,但只有当第二个目录包含了一个第一个目录所没有的文件时,才会将这个文件与空白的文件做比较。

☆-q或--brief  仅显示有无差异,不显示详细的信息。

☆-r或--recursive  比较子目录中的文件。

☆-s或--report-identical-files  若没有发现任何差异,仍然显示信息。

☆-S<文件>或--starting-file<文件> 在比较目录时,从指定的文件开始比较。

☆-t或--expand-tabs  在输出时,将tab字符展开。

☆-T或--initial-tab  在每行前面加上tab字符以便对齐。

☆-u,-U<列数>或--unified=<列数> 以合并的方式来显示文件内容的不同。

☆-v或--version  显示版本信息。

☆-w或--ignore-all-space  忽略全部的空格字符。

☆-W<宽度>或--width<宽度> 在使用-y参数时,指定栏宽。

☆-x<文件名或目录>或--exclude<文件名或目录> 不比较选项中所指定的文件或目录。

☆-X<文件>或--exclude-from<文件> 您可以将文件或目录类型存成文本文件,然后在=<文件>中指定此文本文件。

☆-y或--side-by-side  以并列的方式显示文件的异同之处。

☆--help  显示帮助。

☆--left-column  在使用-y参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容。

☆--suppress-common-lines  在使用-y参数时,仅显示不同之处。

●案例

★实例一:比较两个文件

[root@localhost test3]# diff log2014.log log2013.log

3c3

<2014-03

---

>2013-03

8c8

<2013-07

---

>2013-08

11,12d10

<2013-11

<2013-12

☆上面的"3c3"和"8c8"表示log2014.log和log20143log文件在3行和第8行内容有所不同;"11,12d10"表示第一个文件比第二个文件多了第11和12行。

★实例二:并排格式输出

[root@localhost test3]# diff log2014.log log2013.log -y -W 50

2013-01 2013-01

2013-02 2013-02

2014-03 | 2013-03

2013-04 2013-04

2013-05 2013-05

2013-06 2013-06

2013-07 2013-07

2013-07 | 2013-08

2013-09 2013-09

2013-10 2013-10

2013-11 <

2013-12 <

[root@localhost test3]# diff log2013.log log2014.log -y -W 50

2013-01 2013-01

2013-02 2013-02

2013-03 | 2014-03

2013-04 2013-04

2013-05 2013-05

2013-06 2013-06

2013-07 2013-07

2013-08 | 2013-07

2013-09 2013-09

2013-10 2013-10

>2013-11

>2013-12

★说明:

☆"|"表示前后2个文件内容有不同;

☆"<"表示后面文件比前面文件少了1行内容;

☆">"表示后面文件比前面文件多了1行内容;

1>diff命令的功能

linux中diff命令的功能为逐行比较两个文本文件,列出其不同之处。它对给出的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序。

2>语法

diff

[options]

file1

file2

该命令告诉用户,为了使两个文件file1和file2一致,需要修改它们的哪些行。如果用”-”表示file1或file2,则表示标准输入。如果file1或file2是目录,那么diff将使用该目录中的同名文件进行比较。

3>[options]主要参数

-a:将所有文件当作文本文件来处理。

-b或–ignore-space-change

 忽略空格造成的不同。

-b或–ignore-blank-lines

 忽略空行造成的不同。

-c:使用纲要输出格式。

-h:利用试探法加速对大文件的搜索。

-i:忽略大小写的变化。

-n

–rcs:输出rcs格式。

-n或–new-file

 在比较目录时,若文件a仅出现在某个目录中,会显示:only

in目录文件a若使用-n参数,则diff会将文件a与一个空白的文件比较。

-r或–recursive

 比较子目录中的文件。

-u,-u<列数>或–unified=<列数>

 以合并的方式来显示文件内容的不同。

4>使用方法的实例说明

例如:

diff

/usr/xu

mine

把目录/usr/xu

中名为mine的文件与当前目录中的mine文件进行比较。

通常输出由下述形式的行组成:

n1

a

n3,n4

n1,n2

d

n3

n1,n2

c

n3,n4

这些行类似ed命令把filel转换成file2。字母(a、d和c)之前的行号(n1,n2)是针对file1的,其后面的行号(n3,n4)是针对file2的。字母a、d和c分别表示附加、删除和修改 *** 作。

在上述形式的每一行的后面跟随受到影响的若干行,以”<”打头的行属于第一个文件,以”>”打头的行属于第二个文件。

diff能区别块和字符设备文件以及fifo(管道文件),不会把它们与普通文件进行比较。

如果file1和file2都是目录,则diff会产生很多信息。

5>diff最常用的功能

diff有很多功能平时我们不常用到,最常用的功能莫过于生成patch文件了:

diff

-urn

old/

new/

>

mysoft.patch

参数

-u

表示使用

unified

格式,-r

表示比较目录,-n

表示将不存在的文件当作空文件处理,这样新添加的文件也会出现在patch文件中。

然后在需要应用patch的地方使用下述命令即可:

patch

-p0

<

mysoft.patch

diff的

-y

命令(长格式为

–side-by-side)可以将屏幕分成左右两部分,来比较两个文件之间的差异。许多图形化的比较工具都有这个功能,但如果只能使用命令行,这个参数就相当有用了。如果要改变左右各部分的宽度,可以通过

-w

(–width)参数来指定。

–ignore-blank-lines

参数可以不检查空白行。这样dos格式和unix格式的文件互相比较时,就不至于因为换行符不一致而出现大量的差异。

背景

在Linux系统环境的工作过程中,经常遇到需要对比文件差异的情况,此时,使用Linux提供的diff工具可以方便的发现文件不同版本之间差异,从而快速排除解决问题。

Windows端有强大文件对比工具BeyondCompare。

patch 命令可以将diff命令的输出应用到原始的对比文件中,将新版本的更新应用到原始的文件中。

命令

diff [option] [file1] [file2]

patch [option] [file1] [file_differ]

测试环境

WSL: Linux PERSONALPC 4.4.0-19041-Microsoft #488-Microsoft Mon Sep 01 13:43:00 PST 2020 x86_64 x86_64 x86_64 GNU/Linux

测试过程


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8286255.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-15
下一篇2023-04-15

发表评论

登录后才能评论

评论列表(0条)

    保存