Skip to content

Latest commit

 

History

History
155 lines (133 loc) · 5.36 KB

File metadata and controls

155 lines (133 loc) · 5.36 KB

diff

比较给定的两个文件的不同

补充说明

diff命令 在最简单的情况下,比较给定的两个文件的不同。如果使用“-”代替“文件”参数,则要比较的内容将来自标准输入。diff命令是以逐行的方式,比较文本文件的异同处。如果该命令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作。

语法

diff [OPTION]... FILES

选项

-<行数>:指定要显示多少行的文本。此参数必须与-c或-u参数一并使用;
-a或——text:diff预设只会逐行比较文本文件;
-b或--ignore-space-change:不检查空格字符的不同;
-B或--ignore-blank-lines:不检查空白行;
-c:显示全部内容,并标出不同之处;
-C<行数>或--context<行数>:与执行“-c-<行数>”指令相同;
-d或——minimal:使用不同的演算法,以小的单位来做比较;
-D<巨集名称>或ifdef<巨集名称>:此参数的输出格式可用于前置处理器巨集;
-e或——ed:此参数的输出格式可用于ed的script文件;
-f或-forward-ed:输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处;
-H或--speed-large-files:比较大文件时,可加快速度;
-l<字符或字符串>或--ignore-matching-lines<字符或字符串>:若两个文件在某几行有所不同,
而之际航同时都包含了选项中指定的字符或字符串,则不显示这两个文件的差异;
-i或--ignore-case:不检查大小写的不同;
-l或——paginate:将结果交由pr程序来分页;
-n或——rcs:将比较结果以RCS的格式来显示;
-N或--new-file:在比较目录时,若文件A仅出现在某个目录中,预设会显示:Only in目录,
文件A 若使用-N参数,则diff会将文件A 与一个空白的文件比较;
-p:若比较的文件为C语言的程序码文件时,显示差异所在的函数名称;
-P或--unidirectional-new-file:与-N类似,但只有当第二个目录包含了第一个目录所没有的文件时,
才会将这个文件与空白的文件做比较;
-q或--brief:仅显示有无差异,不显示详细的信息;
-r或——recursive:比较子目录中的文件;
-s或--report-identical-files:若没有发现任何差异,仍然显示信息;
-S<文件>或--starting-file<文件>:在比较目录时,从指定的文件开始比较;
-t或--expand-tabs:在输出时,将tab字符展开;
-T或--initial-tab:在每行前面加上tab字符以便对齐;
-u,-U<列数>或--unified=<列数>:以合并的方式来显示文件内容的不同;
-v或——version:显示版本信息;
-w或--ignore-all-space:忽略全部的空格字符;
-W<宽度>或--width<宽度>:在使用-y参数时,指定栏宽;
-x<文件名或目录>或--exclude<文件名或目录>:不比较选项中所指定的文件或目录;
-X<文件>或--exclude-from<文件>;您可以将文件或目录类型存成文本文件,然后在=<文件>中指定此文本文件;
-y或--side-by-side:以并列的方式显示文件的异同之处;
--help:显示帮助;
--left-column:在使用-y参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容;
--suppress-common-lines:在使用-y参数时,仅显示不同之处。

参数

  • 文件1:指定要比较的第一个文件;
  • 文件2:指定要比较的第二个文件。

实例

1. 比较两个文件

准备两个文件
# cat log1 
NUM 1
NUM 2
LOG 1
NUM4
NUM5
NUM6

# cat log2
NUM 1
NUM 2
LOG 2
NUM4

# diff log1 log2 
3c3
< LOG 1
---
> LOG 2
5,6d4
< NUM5
< NUM6
说明:
上面的"3c3"表示log1和log2文件在3行内容有所不同;"5,6d4"表示第2个文件比第1个文件多了第5和6行。

diff 输出显示格式有三种提示:
a - add
c - change
d - delete

2. 并排格式输出

# diff log1 log2  -y -W 50
NUM 1			NUM 1
NUM 2			NUM 2
LOG 1		      |	LOG 2
NUM4			NUM4
NUM5		      <
NUM6		      <

说明:
“|”表示前后2个文件内容有不同
“<”表示后面文件比前面文件少了1行内容
“>”表示后面文件比前面文件多了1行内容

3. 统一格式输出

# diff log1 log2  -u
--- log1	2019-07-29 09:45:00.640007764 +0800
+++ log2	2019-07-29 09:45:20.216007988 +0800
@@ -1,6 +1,4 @@
 NUM 1
 NUM 2
-LOG 1
+LOG 2
 NUM4
-NUM5
-NUM6

说明:
它的第一部分,也是文件的基本信息:
--- log1	2019-07-29 09:45:00.640007764 +0800
+++ log2	2019-07-29 09:45:20.216007988 +0800

"---"表示变动前的文件,"+++"表示变动后的文件。

4. 比较两个文件不同,并生产补丁

# cat log1
NUM 1
NUM 2
LOG 1
NUM4
NUM5
NUM6
# cat log1.bak 
NUM 1
NUM 4
LOG 2
NUM6
# diff -ruN  log1.bak  log1 > patch.log
 -u 表示使用统一格式,-r 表示比较目录,-N 表示将不 
存在的文件当作空文件处理,这样新添加的文件也会出现在patch文件中。
# cat patch.log 
--- log1.bak	2019-07-29 09:51:45.984012399 +0800
+++ log1	2019-07-29 09:45:00.640007764 +0800
@@ -1,4 +1,6 @@
 NUM 1
-NUM 4
-LOG 2
+NUM 2
+LOG 1
+NUM4
+NUM5
 NUM6