diff(difference)命令常用来比较两个文件中的内容。diff 命令在最简单的情况下,比较两个文件的不同。如果使用“-”代替“文件”参数,则要比较的内容将来自标准输入。下面良许小编就将Linux diff命令进行详述,希望对大家有所帮助。
diff 命令是以逐行的方式比较文本文件的异同处。如果该命令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作。
diff 命令的基本格式有两种,分别如下:
- 比较文件
[root@liangxu ~]# diff [选项] 文件名1 文件名2
- 比较目录。
[root@liangxu ~]# diff [选项] 目录1 目录2
diff 命令常用的选项及功能如表 1 所示。
选 项 | 功 能 |
---|---|
-行数 | 指定要显示多少行的文本。此参数必须与 -c 或 -u 参数一并使用 |
-a | diff 只会逐行比较文本文件 |
-b | 不检查空格字符的不同 |
-B | 不检查空白行 |
-c | 显示全部内文,并标出不同之处 |
-c 行数 | 与执行“-c-行数”指令相同 |
-d | 使用不同的演算法,以较小的单位来做比较 |
-D | 此参数的输出格式可用于前置处理器巨集 |
-e | 此参数的输出格式可用于 ed 的 script 文件 |
-f | 输出的格式类似 ed 的 script 文件,但按照原来文件的顺序来显示不同处 |
-H | 比较大文件时,可加快速度 |
-I | 若两个文件在某几行有所不同,而这几行同时都包含了选项中指定的字符或字符串,则不显示这两个文件的差异 |
-i | 不检查大小写的不同 |
-l | 将结果交由 pr 程序来分页 |
-n | 将比较结果以 RCS 的格式来显示 |
-N | 在比较目录时,若文件 A 仅出现在某个目录中,预设会显示:Only in目录:文件 A 若使用 -N 参 数,则 diff 会将文件 A 与一个空白的文件比较 |
-p | 若比较的文件为 C 语言的程序码文件时,显示差异所在的函数名称 |
-P | 与 -N 类似,但只有当第二个目录包含了一个第一个目录所没有的文件时,才会将这个文件与空 白的文件做比较 |
-q | 仅显示有无差异,不显示详细的信息 |
-r | 比较子目录中的文件 |
-s | 若没有发现任何差异,仍然显示信息 |
-S | 从指定的文件开始比较目录 |
-t | 在输出时,将 tab 字符展开 |
-T | 在每行前面加上 tab 字符以便对齐 |
-u | 以合并的方式来显示文件内容的不同 |
-v | 显示版本信息 |
-w | 忽略全部的空格字符 |
-W | 在使用 -y 参数时,指定栏宽 |
-x | 不比较选项中所指定的文件或目录 |
-X | 可以将文件或目录类型存成文本文件,然后在?中指定此文本文件 |
-y | 以并列的方式显示文件的异同之处 |
–help | 显示帮助 |
–left-column | 在使用 -y 参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容 |
diff 命令的显示结果有以下两种方式:
- < 表示第一个文件中的数据行。
- > 表示第二个文件中的数据行。
注意,diff 命令能够分析并输出两个文件的不同的行。diff 的输出结果表明需要对一个文件做怎样的操作之后才能与第二个文件相匹配(与第一个文件相比,第二个文件发生了哪些变化),其中包含三种操作分别为:a=add,c=change,d=delete。diff 命令并不会改变文件的内容,但是 diff 可以输出一个 ed 脚本来应用这些改变。
【例 1】比较两个文件的不同。
创建两个样本文件,分别命名为 text 和 text1,并分别输入以下内容:
//test
11
22
33
44
55
66
77
//test1
11
22
aa
33
44
55
bb
66
在终端页面中输入命令如下:
[root@liangxu ~]# diff test test1
3c3
<
—
> aa
7c7
<
—
> bb
9,10d8
< 77
<
输出信息的含义分别为:
- “3c3”:表示第一个文件的第 3 行需要修改才能和第二个文件的第3行相匹配;
- “—”:表示分隔线;
- “>aa”:> 表示第二个文件,第一个文件中需要添加的内容为 aa,该内容存放在第二个文件中;
- “>bb”:> 表示第二个文件,第一个文件中需要添加的内容为 bb,该内容存放在第二个文件中;
- “9,10d8”:表示删除第一个文件中的第 9 和第 10 行才能和第二个文件中的第 8 行相匹配;
- “<77”:表示第一个文件中待删除的内容为 77。