AIX命令参考大全,卷 2,d - h - diff 命令

[ 页的底部 | 上一页 | 下一页 | 目录 | 索引 | 法律条款 ]

AIX命令参考大全,卷 2,d - h

diff 命令

用途

比较文本文件。

语法

比较两个文件的内容

diff [ -c | -C Lines | -D [ String ] | -e | -f | -n ] [ -b ] [ -i] [ -t ] File 1 File2

diff [ -h ] [ -b ] File 1 File2

排序字典的内容并比较不同的文件

diff [ -c | -C Lines | -e | -f | -n ] [ -b ] [ -i ] [ -l ] [ -r ] [ -s ] [ -S File ] [ -t ] [ -w ] Directory1 Directory2

diff [ -h ] [ -b ] Directory1 Directory2

描述

diff 命令比较文本文件。它能比较单个文件或者目录内容。

注:
diff 命令只有当输入为文本文件时才有效。

如果指定了 Directory1Directory2 参数,diff 命令比较两个目录下名字相同的文本文件。列出不同的二进制文件、公共子目录和只在一个目录出现的文件。

diff 命令运行于常规文件时,且当目录比较期间比较不同的文本文件时,diff 命令显示文件中哪些行必须更改以保持它们一致。如果 File1File2 参数都不是目录,其中之一可能给定负号“-”,以采用标准输入。如果 File1 参数是目录,则使用目录中 与 File2 参数指定的文件名一致的那个文件。

典型的输出包含这些格式的行:

Lines Affected in File1   Action        Lines Affected in File2
Number1                   a             Number2[,Number3]
Number1[,Number2]         d             Number3
Number1[,Number2]         c             Number3[,Number4] 

这些行类似于 ed 子命令 将 File1 文件转换成 File2 文件。Action 字母之前的数字指 File1;后面的数字则指 File2。因此,通过将 a 替换成 d,从右往左读,您就能知道如何将 File2 转换成 File1。在 ed 命令下,相同的对(即 Number1Number2)会简略为单个数字。

下列每一行,diff 命令显示以 <:(小于符号,冒号)开始的第一个文件中的所有受影响行,然后显示以 >(大于符号)开始的第二个文件中的所有受影响行。

退出值 0 表示没有不同,1 表示找到不同处,2 表示出错。

注:
如果指定了多于一个的 -c-C-D-e-f 或者 -n 标志,命令行上的最后一个具有优先权。系统不发出错误消息。

标志

-b 将每行末尾当作单个新行标记处理(忽略新行字符前的空格字符)的任意数量空格字符与其他空格字符串(除了新行标记)同样地比较。
-C Lines 启动 diff 命令,但只比较 Lines 变量指定的行数。-C 标志稍微修改输出。输出以文件的相同部分和创建日期开始。每个更改以 12 个 *(星号)组成的行分隔。从 File1 中要删的行以 -(减号)标记,File2 中要添加的行以 +(加号)标记。从一个文件更改到另一个文件的行在两个文件中都 以 !(惊叹号)标记。在每一个文件的指定上下文行中的更改会被整组一起输出。
-c 启动 diff 命令,比较三行上下文。-c 标志稍微修改输出。输出以涉及文件的标识和它们的创建日期开始。每个更改以 12 个 *(星号)组成的行分隔。File1 中要删的行 以 -(减号)标记,要被添加到 File2 的行以 + (加号)标记。从一个文件更改到另一个文件的行在两个文件中都 以 !(惊叹号)标记。在每一个文件的指定上下文行中的更改会被整组一起输出。
-D [ String ] 使得 diff 命令在标准输出上建立 一个 File1File2 的合并版本。包含了 C 预处理器控件以便没有 定义 String 的结果编译等同于 编译 File1,同时定义 String 产生 File2
-e 以适合 ed 编辑器的格式进行输出,将 File1 转换成 File2。当使用这个标志时,以下 shell 程序可以帮助维护一个文件的多个版本。手头仅需要由 diff 命令生成的一个祖先文件($1) 和一系列版本的 ed 脚本($2$3、...)。标准输出上的最近版本如下:

(shift; cat $*; echo '1,$p') | ed - $1

当使用 -e 标志比较目录时,输出上添加了额外的命令, 因此,结果是一个 shell 脚本,将两个目录上的共有文本文件 从 Directory1 上的状态转换到 Directory2 上的状态。

注:
-e-f 标志产生的编辑脚本无法创建由单个组成的行。(周期)。
-f 以不适合 ed 编辑器的格式创建输出,按照在 -e 标志下产生的逆向顺序显示从 File1File2 的转换的必要修改。
-h 如果要更改的部分比较短而且分隔清晰,则执行备用的比较可能会更快。-h 标志可用于任意长度的文件。-c-C-D-e-f-n 标志无法与 -h 标志一起使用。当使用 -h 标志时,除了 -b 标志,其他标志一律忽略。
-i 忽略字母大小写。例如,小写 a 被认为同大写 A 一样。
-l 长输出格式。每个由文本文件比较 diff 命令 获得的结果通过命令 pr 输送 分页。在报告所有文本文件不同之处后,其他不同之处将被记忆和总结。
-n 产生类似于 -e 标志创建的输出,但是顺序相反,而且在每一插入或删除命令上进行更改计数。这是修订控件系统(RCS)所用的格式。
-r 使 diff 命令的应用程序递归到遇到的公共子目录。
-s 报告相同的文件,否则不提。
-S [ File ] 当比较目录时,忽略在 File 变量指定的文件之前整理名称的文件。-S 标志只用于 Directory1Directory2 参数指定的目录。如果您将 -r 标志与 -S 标志一起使用, -S 标志在 Directory1Directory2 子目录中不进行递归。
-t 在输出行扩展制表符。典型输出或者 -c 标志输出会添加字符到每一行首,这会影响初始行的缩进,使得输出列表难以解释。该标志则保留原始源的缩进。
-w 忽略所有空格和制表符,将所有其他空白字符串视为一致。例如,if ( a == b )if(a==b) 相等。

退出状态

此命令返回下列退出值:

0 未找到不同处。
1 找到不同处。
>1 发生错误。

示例

  1. 要比较两个文件,请输入:

    diff chap1.back chap1

    这显示文件 chap1.bakchap1 的不同处。

  2. 要比较两个文件,但是忽略空格字符个数的区别,请输入:
    diff  -w prog.c.bak prog.c
    如果两行仅仅空格和制表符数目不同,则 diff -w 目录认为它们相等。
  3. 要创建一个包含 ed 命令可以用于从另一个文件重构文件的命令的文件,请输入:
    diff  -e chap2 chap2.old >new.to.old.ed
    这将创建一个名为 new.to.old.ed 的文件,它包含 ed 子命令,把 chap2 转换 回在 chap2.old 中找到的文本版本。在大多数情况下,new.to.old.edchap2.old 要小很多。您可以通过删除 chap2.old 以节省磁盘空间,您也可以在任何时候重建它,通过输入:
    (cat new.to.old.ed ; echo '1,$p') | ed - chap2 >chap2.old
    括号中的命令把 1,$p 添加到 编辑命令的末尾,发送给 ed 编辑器。1,$p 使得 ed 命令在编辑完成后将文件写到标准输出。这一修改的命令序列然后 从管道传给 ed 命令(| ed),编辑器读取它作为标准输入。- 标志使 ed 命令不显示文件大小以及其他附加信息因为它们易与 chap2.old 的文本混肴。

文件

/usr/bin/diff 包含 diff 命令。

相关信息

bdiff 命令、cmp 命令、 diff3 命令、ed 命令、 pr 命令。

《AIX 5L V5.2 系统用户指南:操作系统与设备》中的『文件概述』向您提供文件 并且告知您处理它们的方式。

《AIX 5L V5.2 系统用户指南:操作系统与设备》中的『输入输出重定向概述』描述了操作系统如何处理输入输出。

[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 | 法律条款 ]