diff命令详解

diff命令参数:

diff - 找出两个文件的不同点

总览

diff [选项] 源文件 目标文件

下面是 GNU所接受的 diff 的所有选项的概要. 大多数的选项有两个相同的名字,一个是单个的跟在 - 后面字母, 另一个是由 – 引出的长名字. 多个单字母选项(除非它们产生歧义)能够组合为单行的命令行语法 -ac 是等同于 -a -c. 长命名的选项能被缩短到他们的名字的任何唯一的前缀. 用 ([ 和 ]) 括起来显示选项产生歧义的选项

-行数(一个整数)

显示上下文 行数 (一个整数). 这个选项自身没有指定输出格式,这是没有效果的,除非和 -c 或者 -u 组合使用. 这是已废置的选项,对于正确的操作, 上下文至少要有两行。

-a

所有的文件都视为文本文件来逐行比较,甚至他们似乎不是文本文件.

-b

忽略空格引起的变化.

-B

忽略插入删除空行引起的变化.

–brief

仅报告文件是否相异,在乎差别的细节.

-c

使用上下文输出格式.

-C 行数(一个整数)

–context[=lines]

使用上下文输出格式,显示以指定 行数 (一个整数), 或者是三行(当 行数 没有给出时. 对于正确的操作, 上下文至少要有两行.

–changed-group-format=format

使用 format 输出一组包含两个文件的不同处的行,其格式是 if-then-else .

-d

改变算法也许发现变化的一个更小的集合.这会使 diff 变慢 (有时更慢).

-D name

合并 if-then-else 格式输出, 预处理宏(由name参数提供)条件.

-e

–ed

输出为一个有效的 ed 脚本.

–exclude=pattern

比较目录的时候,忽略和目录中与 pattern(样式) 相配的.

–exclude-from=file

比较目录的时候,忽略和目录中与任何包含在 file(文件) 的样式相配的文件和目录.

–expand-tabs

在输出时扩展tab为空格,保护输入文件的tab对齐方式

-f

产生一个很象 ed 脚本的输出,但是但是在他们在文件出现的顺序有改变

-F regexp

在上下文和统一格式中,对于每一大块的不同,显示出匹配 regexp. 的一些前面的行.

–forward-ed

产生象 ed 脚本的输出,但是它们在文件出现的顺序有改变。

-h

这选项现在已没作用,它呈现Unix的兼容性.

-H

使用启发规则加速操作那些有许多离散的小差异的大文件.

–horizon-lines=lines

比较给定行数的有共同前缀的最后行,和有共同或缀的最前行.

-i

忽略大小写.

-I regexp

忽略由插入,删除行(由regexp 参数提供参考)带来的改变.

–ifdef=name

合并 if-then-else 格式输出, 预处理宏(由name参数提供)条件.

–ignore-all-space

在比较行的时候忽略空白.

–ignore-blank-lines

忽略插入和删除空行

–ignore-case

忽略大小写.

–ignore-matching-lines=regexp

忽略插入删除行(由regexp 参数提供参考).

–ignore-space-change

忽略空白的数量.

–initial-tab

在文本行(无论是常规的或者格式化的前后文关系)前输出tab代替空格. 引起的原因是tab对齐方式看上去象是常规的一样.

-l

产生通过 pr 编码的输出.

-L label

–label=label

使用 label 给出的字符在文件头代替文件名输出.

–left-column

以并列方式印出两公共行的左边

–line-format=format

使用 format 输出所有的行,在 if-then-else 格式中.

–minimal

改变算法也许发现变化的一个更小的集合.这会使 diff 变慢 (有时更慢).

-n

输出 RC-格式 diffs; 除了每条指令指定的行数受影响外 象 -f 一样。

-N

–new-file

在目录比较中,如果那个文件只在其中的一个目录中找到,那么它被视为在另一个目录中是一个空文件.

–new-group-format=format

使用 format 以if-then-else 格式输出只在第二个文件中取出的一个行组

–new-line-format=format

使用 format 以if-then-else 格式输出只在第二个文件中取出的一行

–old-group-format=format

使用 format 以if-then-else 格式输出只在第一个文件中取出的一个行组

–old-line-format=format

使用 format 使用 format 以if-then-else 格式输出只在第一个文件中取出的一行

-p

显示带有c函数的改变.

-P

在目录比较中,如果那个文件只在其中的一个目录中找到,那么它被视为在另一个目录中是一个空文件.

–paginate

产生通过 pr 编码的输出.

-q

仅报告文件是否相异,不报告详细的差异.

-r

当比较目录时,递归比较任何找到的子目录.

–rcs

输出 RC-格式 diffs; 除了每条指令指定的行数受影响外 象 -f 一样。

–recursive

当比较目录时,递归比较任何找到的子目录.

–report-identical-files

-s

报告两个文件相同.

-S file

当比较目录时,由 file 开始. 这用于继续中断了的比较.

–sdiff-merge-assist

打印附加的信息去帮助 sdiff. sdiff 在运行 diff 时使用这些选项. 这些选项不是特意为使用者直接使用而准备的。

–show-c-function

显示带有c函数的改变.

–show-function-line=regexp

在上下文和统一的格式,对于每一大块的差别,显示出匹配 regexp. 的一些前面的行

–side-by-side

使用并列的输出格式.

–speed-large-files

使用启发规则加速操作那些有许多离散的小差异的大文件.

–starting-file=file

当比较目录时,由 file 开始. 这用于继续中断了的比较.

–suppress-common-lines

在并列格式中不印出公共行。

-t

在输出时扩展tab为空格,保护输入文件的tab对齐方式

-T

在文本行(无论是常规的或者格式化的前后文关系)前输出tab代替空格.引起的原因是tab对齐方式看上去象是常规的一样.

–text

所有的文件都视为文本文件来逐行比较,甚至他们似乎不是文本文件.

-u

使用统一的输出格式.

–unchanged-group-format=format

使用 format 输出两个文件的公共行组,其格式是if-then-else.

–unchanged-line-format=format

使用 format 输出两个文件的公共行,其格式是if-then-else.

–unidirectional-new-file

在目录比较中,如果那个文件只在其中的一个目录中找到,那么它被视为在另一个目录中是一个空文件.

-U lines

–unified[=lines]

使用前后关系格式输出,显示以指定 行数 (一个整数), 或者是三行(当 行数 没有给出时. 对于正确的操作, 上下文至少要有两行.

-v

–version

输出 diff 版本号.

-w

在比较行时忽略空格

-W columns

–width=columns

在并列格式输出时,使用指定的列宽.

-x pattern

比较目录的时候,忽略和目录中与 pattern(样式) 相配的.

-X file

比较目录的时候,忽略和目录中与任何包含在 file(文件) 的样式相配的文件和目录.

-y

使用并列格式输出

实例:

有这样两个文件:

程序清单1 :hello.c

include

int main(void)

{

char msg[] = “Hello world!”;

puts(msg);
printf("Welcome to use diff commond.\n");

return 0;

}

程序清单2:hello_diff.c

include

include

int main(void)

{

char msg[] = “Hello world,fome hello_diff.c”;

puts(msg);
printf("hello_diff.c says,‘Here you are,using diff.‘\n");

return 0;

}

我们使用diff命令来查看这两个文件的不同之处,有一下几种方便的方法:

1、普通格式输出:

[[email protected] diff]# diff hello.c hello_diff.c

1a2

include

5c6

char msg[] = “Hello world,fome hello_diff.c”;

8c9

printf(“hello_diff.c says,’Here you are,using diff.’\n”);

[[email protected] diff]#

上面的“1a2”表示后面的一个文件”hello_diff.c”比前面的一个文件”hello.c”多了一行

“5c6”表示第一个文件的第5行与第二个文件的第6行有区别

2、并排格式输出

[[email protected] diff]# diff hello.c hello_diff.c -y -W 130

include #include

                                                          > #include

int main(void) int main(void)

{ {

char msg[] = “Hello world!”; | char msg[] = “Hello world,fome hello_diff.c”;

puts(msg); puts(msg);

printf(“Welcome to use diff commond.\n”); | printf(“hello_diff.c says,’Here you are,using diff.’\

return 0; return 0;

} }

[[email protected] diff]#

这种并排格式的对比一目了然,可以快速找到不同的地方。

-W选择可以指定输出列的宽度,这里指定输出列宽为130

3、上下文输出格式

[[email protected] diff]# diff hello.c hello_diff.c -c

* hello.c 2007-09-25 17:54:51.000000000 +0800

— hello_diff.c 2007-09-25 17:56:00.000000000 +0800



* 1,11 **

#include

int main(void)

{

! char msg[] = “Hello world!”;

    puts(msg);

! printf(“Welcome to use diff commond.\n”);

    return 0;

}

— 1,12 —-

#include

+ #include

int main(void)

{

! char msg[] = “Hello world,fome hello_diff.c”;

    puts(msg);

! printf(“hello_diff.c says,’Here you are,using diff.’\n”);

    return 0;

}

[[email protected] diff]#

这种方式在开头两行作了比较文件的说明,这里有三中特殊字符:

+ 比较的文件的后者比前着多一行

- 比较的文件的后者比前着少一行

! 比较的文件两者有差别的行

4、统一输出格式

[[email protected] diff]# diff hello.c hello_diff.c -u

— hello.c 2007-09-25 17:54:51.000000000 +0800

+++ hello_diff.c 2007-09-25 17:56:00.000000000 +0800

@@ -1,11 +1,12 @@

include

+#include

int main(void)

{

- char msg[] = “Hello world!”;

+ char msg[] = “Hello world,fome hello_diff.c”;

    puts(msg);

- printf(“Welcome to use diff commond.\n”);

+ printf(“hello_diff.c says,’Here you are,using diff.’\n”);

    return 0;

}

[[email protected] diff]#

正如看到的那样,统一格式的输出更加紧凑,所以更易于理解,更易于修改。

5、其他

假如你想查看两个文件是否不同又不想显示差异之处的话,可以加上-q选项:

[[email protected] diff]# diff hello.c hello_diff.c -q

Files hello.c and hello_diff.c differ

[[email protected] diff]# 另外你还可以提供一些匹配规则来忽略某中差别,可以用 -I regexp

[[email protected] diff]# diff hello.c hello_diff.c -c -I include

* hello.c 2007-09-25 17:54:51.000000000 +0800

— hello_diff.c 2007-09-25 17:56:00.000000000 +0800



* 2,11 **

int main(void)

{

! char msg[] = “Hello world!”;

    puts(msg);

! printf(“Welcome to use diff commond.\n”);

    return 0;

}

— 3,12 —-

int main(void)

{

! char msg[] = “Hello world,fome hello_diff.c”;

    puts(msg);

! printf(“hello_diff.c says,’Here you are,using diff.’\n”);

    return 0;

}

[[email protected] diff]#

这里通过“ -I include”选项来忽略带有“ include”字样的行

部分内容来自:http://blog.chinaunix.net/u1/48325/showart_433936.html

http://hi.baidu.com/ilotus_y/blog/item/b94231d6f55a1e2a07088b91.html

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-22 13:19:20

diff命令详解的相关文章

Linux 文本对比 diff 命令详解(整理)

diff 命令详解 1.概述 windows系统下面就有不错的文本对比工具可以使用,例如常用的Beyond Compare,WinMerge都是图形界面的比较工具而且使用非常方便,如果你仅仅是在windows下工作,这些GUI的比较工具绝对是首选.对于在linux环境下工作的人来说,如果每次想看两个文件的区别都要将文件下载到windows环境然后用图形工具进行比较实在是太麻烦了.那么我们必须学会使用linux环境下的比较工具 diff. diff命令在最简单的情况下,比较给定的两个文件的不同.如

diff 命令详解

[自注:] 1,还有个colordiff命令,用颜色标识不同的地方.需要先安装 2,diff normal模式中 2,5表示从第二行到第五行 3,diff -c 模式中,2,5表示从第二行到第五行 4,diff -u模式中,2,5表示从第二行开始的连续5行,即第2,3,4,5,6行 阅读目录 1.概述 2.diff如何工作,如何理解diff的执行结果 3.Normal模式 4.Context模式 5.Unified模式 6.比较目录 7.一些有用的参数 回到顶部 1.概述 本文将要讨论的是dif

LINUX DIFF命令详解

刚才在和公司做离线IP对比,最后手工了,感觉还是比较麻烦的,遇到数据很大的时候不能手工进行了 本想用linux下的DIFF来进行对比,发现结果很乱.时间很紧最后还是手工了. 现在忙完要认认真真学习一下这个命令: 内容摘自网上: diff是Unix系统的一个很重要的工具程序. 它用来比较两个文本文件的差异,是代码版本管理的基石之一.你在命令行下,输入: $ diff <变动前的文件> <变动后的文件> diff就会告诉你,这两个文件有何差异.它的显示结果不太好懂,下面我就来说明,如何

git diff命令详解

diff里面a表示前面那个变量,b表示第二个变量 HEAD     commit版本Index     staged版本 a.查看尚未暂存的文件更新了哪些部分,不加参数直接输入    git diff此命令比较的是工作目录(Working tree)和暂存区域快照(index)之间的差异也就是修改之后还没有暂存起来的变化内容. b.查看已经暂存起来的文件(staged)和上次提交时的快照之间(HEAD)的差异    git diff --cached    git diff --staged显示

Git命令详解(一)-个人使用

原文  http://blog.csdn.net/magicharvey/article/details/12431867 本文暂时不会涉及到团队如何使用Git的内容,而是从个人的角度探讨如何用好Git. 约定 绿色的5位字符表示提交的ID,分别指向父节点.分支用橘色显示,分别指向特定的提交.当前分支由附在其上的标识. 这张图片里显示最后5次提交,是最新提交.分支指向此次提交,另一个分支指向祖父提交节点. git cat-file git cat-file -t,查看Git对象的类型,主要的gi

windbg命令详解

DLL 该扩展仅在内核模式下使用,即使它是在Ext.dll中的. Windows NT 4.0 Ext.dll Windows 2000 Ext.dll Windows XP和之后 Ext.dll 注释 如果不提供参数,调试器会列出所有进程,以及时间和优先级统计.这和使用!process @#Process 0 作为CommandString值一样. To terminate execution at any point, press CTRL+BREAK (in WinDbg) or CTRL

Git初探--笔记整理和Git命令详解

几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面clone一个项目到本地时(假设项目名为GitTest),在本地就会看到一个名为GitTest的目录,目录下有项目代码和一个名为.git的目录,什么是工作区呢,就是除了.git文件夹以外的所有东西,我们主要在工作区上阅读,修改,添加删除代码和其他内容,而这个.git目录就称为一个版本库,这个版本库中存

linux下tar命令详解

 linux下tar命令详解  tar是Linux环境下最常用的备份工具之一.tar(tap archive)原意为操作磁带文件,但基于Linux的文件操作机制,同样也可适用于普通的磁盘文件.tar可用于建立.还原.查看.管理文件,也可方 便的追加新文件到备份文件中,或仅更新部分的备份文件,以及解压.删除指定的文件.熟悉其常用参数,能方便日常的系统管理工作. 一.版本 还是那句,不同的操作系统,tar的命令参数是有点区别的: 引用 # tar --version tar (GNU tar) 1.

svn常用命令详解(很全,很实用)

ubuntu下安装subversion客户端: sudo apt-getinstall subversion subversion-tools 1.检出 svn  co  http://路径(目录或文件的全路径) [本地目录全路径] --username 用户名 --password 密码 svn  co  svn://路径(目录或文件的全路径) [本地目录全路径]  --username 用户名 --password 密码 svn  checkout  http://路径(目录或文件的全路径)