文档章节

Linux文本比较指令(diff,cmp)详解

mskk
 mskk
发布于 2017/05/04 21:22
字数 1500
阅读 0
收藏 0

一、文本文件比较命令diff

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格式的文件互相比较时,就不至于因为换行符不一致而出现大量的差异。

二、二进制文件比较命令cmp

用途
比较两个文件的内容并报告不同的第一个字符。

语法
cmp [ -l | -s ] File1 File2

描述
cmp 命令比较 File1 和 File2 参数指定的文件,并将结果写到标准输出。如果为 File1 或 File2 参数指定 -(减号),则 cmp 命令读取该文件的标准输入。只可以从标准输入读取一个文件。在缺省条件下,如果文件相同,则 cmp 命令不显示任何内容。如果它们不同,则 cmp 命令显示发生不同的第一个字节数和行数。如果指定了 -l 标志,并且如果一个文件是另一文件的初始后继(即,如果在查找任何差别之前,cmp 命令读取文件中的文件结束符),则 cmp 命令记下它。通常,使用 cmp 命令比较非文本文件,使用 diff 命令比较文本文件。
标志
-l     对于每个不同,(小写字母 L)显示十进制的字节数和八进制的不同字节。
-s     只返回退出值。值 0 指示相同的文件;值 1 指示不同的文件;值 2 指示不可访问的文件或缺少选项。
退出状态
该命令返回以下退出值:
0     文件相同。
1     文件不同。即使一个文件是另一个文件的初始后继(一个文件与另一个文件的第一个部分相同),也给出该值。
>1     发生错误。
示例
   1. 要确定两个文件是否相同,请输入:
      cmp prog.o.bak prog.o
      这比较 prog.o.bak 和 prog.o。如果文件相同,则不显示消息。如果文件不同,则显示第一个不同的位置;例如:
      prog.o.bak prog.o differ: char 4, line 1
      如果显示消息 cmp: EOF on prog.o.bak,则 prog.o 的第一部分与 prog.o.bak 相同,但在 prog.o 中还有其他数据。
   2. 要显示不同字节的每个对,请输入:
cmp -l prog.o.bak prog.o
这比较文件,然后显示字节数(使用十进制格式)和每个不同的不同字节(使用八进制格式)。例如,如果第五个字节在 prog.o.bak 中是八进制 101,在 prog.o 中是 141,则 cmp 命令显示:
      5 101 141
   3. 要比较两个文件,而不写任何消息,请输入:
      cmp -s prog.c.bak prog.c
这样,如果文件相同,则给出值 0,如果不同,则给出值 1,或者如果发生错误,则给出值 2。该命令形式通常用在 shell 步骤中。例如:
      if cmp -s prog.c.bak prog.c
then
echo No change
fi
如果两个文件相同,则该部分的 shell 步骤显示 No change。

本文转载自:http://gaylord.iteye.com/blog/2087744

共有 人打赏支持
mskk
粉丝 3
博文 151
码字总数 3099
作品 0
宝山
程序员
linux文本处理指令

相比于vim, sed和awk指令可以处理及其巨大的文件而不会发生崩溃的情况 sed指令,行处理 awk指令,列处理 diff指令,文件比较 diff 行比较指令 vimdiff 指令较diff更直观 cmp 字节比较指令 ...

麦拂沙
2015/10/08
56
0
diff - 找出两个文件的不同点

DIFF(1) GNU Tools DIFF(1) NAME diff - 找出两个文件的不同点 总览 diff [选项] 源文件 目标文件 描述 在 最简单的情况是, diff 比较两个文件的内容 (源文件和 目标文件). 文件 名可以是 ...

zhongyilin
2014/03/04
0
0
详解补丁文件在Beyond Compare中的生成操作

作为站长代码修改是必须要做的功课,在多次修改代码过程中,代码差异的问题就会出现,Beyond Compare是一款实用的代码比较软件。并且Beyond Compare软件在比较代码差异的同时,也可以生成补丁...

学术研究软件
2016/06/17
7
0
Linux的uniq和diff命令

有两个有用的文件内容相关的命令,这里复习脑补一下。 uniq命令 uniq [选项] 文件 说明:这个命令读取输入文件,并比较相邻的行。在正常情况下,第二个及以后更多个重复行将被删去,行比较是...

HappyBKs
2015/07/14
0
0
patch 的用法简单介绍

原文地址 http://www.ibm.com/developerworks/cn/linux/l-diffp/index.html 1.diff diff以"行"为单位比较两个文本文件(也可以是目录比较),并将不同之处以某种格式输出到标准输出上;patch...

鉴客
2010/11/24
755
2

没有更多内容

加载失败,请刷新页面

加载更多

Bash常用内置变量介绍

Bash常用内置变量介绍 Bash中有很多内置变量,这些变量不仅影响Bash的相关行为,也大大的方便了用户的常见操作。**Bash内置变量大体上包括两类,一类是传统Shell所具备的,另一类就是Bash所特...

小陶小陶
27分钟前
0
0
05-《深度拆解Java虚拟机》之JVM是如何执行方法调用的?(下)

一、问题引入 我们知道,设计模式大量使用了虚方法来实现多态。但是虚方法的性能效率并不高,所以作者就想在此基础上写篇文章,评估每一种设计模式因为虚方法调用而造成的性能开销,并且在文...

飞鱼说编程
47分钟前
3
0
nginx统一入口 多服务出口

nginx配置多ip和端口统一调用入口log_format中$upstream_addr 标识打印转发的url地址配置upstream和locationhttp {include mime.types;default_type application/octet-stream...

GoldenVein
49分钟前
3
0
阿里P9架构师谈:高并发网站的监控系统选型、比较、核心监控指标

在高并发分布式环境下,对于访问量大的业务、接口等,需要及时的监控网站的健康程度,防止网站出现访问缓慢,甚至在特殊情况出现应用服务器雪崩等场景,在高并发场景下网站无法正常访问的情况...

我是你大哥
51分钟前
2
0
华为HiAI 助力苏宁易购,让你尽享完美视觉购物体验!

还在感慨商品照片与实物存在差距,又要退货? 还在抱怨被忽视的图片小细节,影响了生活品质? 想要“买买买”, 又担心海量的商品图片耗光你的流量? 就在近期 搭载HiAI能力的苏宁易购新版上线...

华为终端开放实验室
52分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部