Linux⽂本⽐较指令(diff,cmp)详解
⼀、⽂本⽂件⽐较命令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怎么用
cmp 命令⽐较 File1 和 File2 参数指定的⽂件,并将结果写到标准输出。如果为 File1 或 File2 参数指定 -(减号),则 cmp 命令读取该⽂件的标准输⼊。只可以从标准输⼊读取⼀个⽂件。在缺省条件下,如果⽂件相同,则 cmp 命令不显⽰任何内容。如果它们不同,则 cmp 命令显⽰发⽣不同的第⼀个字节数和⾏数。如果指定了 -l 标志,并且如果⼀个⽂件是另⼀⽂件的初始后继(即,如果在查任何差别之前,cmp 命令读取⽂件中的⽂件结束符),则 cmp 命令记下它。通常,使⽤ cmp 命令⽐较⾮⽂本⽂件,使⽤ diff 命令⽐较⽂本⽂件。标志
-l 对于每个不同,(⼩写字母 L)显⽰⼗进制的字节数和⼋进制的不同字节。
-s 只返回退出值。值 0 指⽰相同的⽂件;值 1 指⽰不同的⽂件;值 2 指⽰不可访问的⽂件或缺少选项。
退出状态
该命令返回以下退出值:
0 ⽂件相同。
1 ⽂件不同。即使⼀个⽂件是另⼀个⽂件的初始后继(⼀个⽂件与另⼀个⽂件的第⼀个部分相同),也给出该值。
1 发⽣错误。
⽰例
1. 要确定两个⽂件是否相同,请输⼊:
bak prog.o
这⽐较 bak 和 prog.o。如果⽂件相同,则不显⽰消息。如果⽂件不同,则显⽰第⼀个不同的位置;例如:
如果显⽰消息 cmp: EOF bak,则 prog.o 的第⼀部分与 bak 相同,但在 prog.o 中还有其他数据。
2. 要显⽰不同字节的每个对,请输⼊:
cmp -bak prog.o
这⽐较⽂件,然后显⽰字节数(使⽤⼗进制格式)和每个不同的不同字节(使⽤⼋进制格式)。例如,如果第五个字节在 bak 中是⼋进制 101,在 prog.o 中是 141,则 cmp 命令显⽰:
5 101 141
3. 要⽐较两个⽂件,⽽不写任何消息,请输⼊:
cmp -bak prog.c
这样,如果⽂件相同,则给出值 0,如果不同,则给出值 1,或者如果发⽣错误,则给出值 2。该命令形式通常⽤在 shell 步骤中。
例如:
if cmp -bak prog.c
then
echo No change
fi
如果两个⽂件相同,则该部分的 shell 步骤显⽰ No change。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。