「diff(1)」-

逐行比较文件

命令语法格式

diff [OPTION]… FILES

命令描述

逐行比较FILES的内容。

参数FILES是’FILE1 FILE2’或’DIR1 DIR2’或’DIR FILE’或’FILE DIR’。如果给出–from-file或–to-file,则对FILE(S)没有限制。如果FILE是’-‘,则读取标准输入。

命令支持的选项及含义

需要提供给长选项的参数也需要提供给对应的短选项。

–normal
输出正常的比较结果(默认值)

-q, –brief
仅在文件不同时进行报告。

-s, –report-identical-files
在两个文件相同时,进行报告。

-c, -C NUM, –context[=NUM]
为文件的不同之处输出上下文的行,默认为“3”行。

-u, -U NUM, –unified[=NUM]
输出统一上下文的NUM行。参数NUM默认为“3”。

-e, –ed
输出ed脚本。

-n, –rcs
输出RCS格式的比较结果。

-y, –side-by-side
输出两列。

-W, –width=NUM
输出最多NUM(默认130)打印列

–left-column
仅在左侧输出公共行。

–suppress-common-lines
不要输出公共行。

-p, –show-c-function
显示每个变化所在的C函数。

-F, –show-function-line=RE
显示匹配RE的最近行

–label LABEL
使用LABEL,而不是文件名和时间戳(可以重复)

-t, –expand-tabs
在输出中,将制表符转化为空格。

-T, –initial-tab
通过添加制表符使标签对齐。

–tabsize=NUM
每NUM个打印列为一个TAB位。默认为“8”。

–suppress-blank-empty
在空输出行之前,抑制空格或制表符

-l, –paginate
将输出传递给’pr’,以对其进行分页。

-r, –recursive
递归地比较找到的所有子目录。

–no-dereference
不要解析符号链接。

-N, –new-file
将缺失的文件视为内容为空的文件。

–unidirectional-new-file
将缺失的第一个文件视为内容为空的文件。

–ignore-file-name-case
当比较文件名时忽略大小写。

–no-ignore-file-name-case
比较文件名时,不要忽略大小写。

-x, –exclude=PAT
排除匹配PAT的文件。

-X, –exclude-from=FILE
与-x(–exclude)类似,只不过是从文件FILE中读取PAT。

-S, –starting-file=FILE
当比较目录是,以文件FILE为开始。

–from-file=FILE1
将FILE1与所有操作数进行比较;FILE1可以是目录。

–to-file=FILE2
将所有的操作数与FILE2进行比较;FILE2可以是一个目录。

-i, –ignore-case
比较文件内容时,忽略大小写。

-E, –ignore-tab-expansion
忽略由TAB转义引起的内容不同。

-Z, –ignore-trailing-space
忽略行为的空格。

-b, –ignore-space-change
忽略空白数量的变化

-w, –ignore-all-space
忽略所有空格的变行。

-B, –ignore-blank-lines
忽略所有空白行的变化。

-I, –ignore-matching-lines=RE
忽略所有匹配RE的行的变化。

-a, –text
将所有的文件视为普通的文本文件。

–strip-trailing-cr
在输出中,截掉所有的回车符号(CR)

-d, –minimal
努力寻找一个很小的变化集。

–horizon-lines=NUM
保留共同前缀和后缀的NUM行。

–speed-large-files
假设是大文件,并存在许多分散的小变化。

-D NAME, –ifdef=NAME
使用带有“#ifdef NAME”差异来输出合并文件

精细化地控制输出行

–GTYPE-group-format=GFMT
使用GFMT格式来格式化GTYPE格式的输入组。

–line-format=LFMT
使用LFMT格式来格式化所有的输入行。

–LTYPE-line-format=LFMT
使用LFMT格式来格式化LTYPE类型的输入行。

下面这些格式选项提供了对diff输出的细粒度控制,泛化-D/–ifdef:

LTYPE:’old’、’new’、’unchanged’。

GTYPE:“LTYPE”、“changed”。

GFMT(only):

%< lines from FILE1

%> lines from FILE2

%= lines common to FILE1 and FILE2

%[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER

LETTERs are as follows for new group, lower case for old group:

F first line number

L last line number

N number of lines = L-F+1

E F-1

M L+1

%(A=B?T:E) if A equals B then T else E

LFMT(only):

%L contents of line

%l contents of line, excluding any trailing newline

%[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number

GFMT and LFMT:

%% %

%c’C’ the single character C

%c’\OOO’
the character with octal code OOO

C the character C (other characters represent themselves)

注意选项里的LTYPELTYPE为参数变量,不是固定的选项。

彩色输出

–color[=WHEN]
彩色化输出结果。参数WHEN的取值为’never’、’always’、’auto’。其中,”auto“为默认值。

–palette=PALETTE
当使用–color选项时,该选项参数PALETTE指定了要使用的颜色。参数PALETTE是以冒号分隔的列表terminfo功能。

其他选项

–help
显示帮助信息并退出。

-v, –version
显示版本信息。

退出状态

0 输入文件相同

1 输入文件存在不同(手册中说存在不同退出是“2”。经测试是“1”)

2 存在其他问题

相关手册

wdiff(1), cmp(1), diff3(1), sdiff(1), patch(1)

查看Info手册:info diff

参考文献

更新日志

  • 08/07/2018 创建文章