11.Linux文件管理命令---diff比较两个文件

简介: 11.Linux文件管理命令---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 使用启发规则加速操作那些有许多离散的小差异的大文件。
--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 忽略插入、删除行。
--ignore-space-change 忽略空白的数量。
--initial-tab 在文本行(无论是常规的还是格式化的前后文关系)前输出 tab 代替空格。
引起的原因是 tab 对齐方式看上去像是常规的一样。
-l 产生通过 pr 编码的输出。
-L label--label=label 使用 label 给出的字符在文件头代替文件名输出。
--left-column 以并列方式印出两个公共行的左边。
--line-format=format 使用 format 格式输出所有的行
--minimal 改变算法也许发现变化的一个更小的集合。这会使 diff 变慢(有时更慢)。
命令 描述
-n 输出 RC-格式 diffs;除了每条指令指定的行数受影响外,像-f 一样。
-N 在比较目录时,若文件 A 仅出现在某个目录中,预设会显示 Only in 目录;文件 A
若使用-N 参数,则 diff 会将文件 A 与一个空白的文件比较。
--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 以 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] 使用前后关系格式输出,显示指定行数(一个整数)或者三行(当行
数没有给出时)。对于正确的操作,上下文至少要有两行。
--version 输出 diff 版本号。
-w 在比较行时忽略空格。
-W columns 指定栏宽。
--width=columns 在并列格式输出时,使用指定的列宽。
-x pattern 比较目录的时候,忽略和目录中与 pattern(样式)相匹配的。
-X file 比较目录的时候,忽略和目录中与任何包含在 file(文件)
中的样式相匹配的文件和目录。
-y 使用并列格式输出。

练习案例

使用并排(side-by-side)用法查看文件差异,如图 2-5 所示。

这是两个相似却又有所不同的文件:hello.cpp 和 hello1.cpp,使用并排(side-by-side)用法 可以直观地比较源代码文件的差异。尽管出现了截行,还是可以非常清楚地显示两个文件的区别。-W 选项指定输出列的宽度。diff 接受这个宽度,并且分配给两个文件各 40 行。字符“>” 表示该行在目的文件中,字符“<”表示该行在源文件中,字符“|”标记出两个文件中不相同 的行。

注意

diff 以逐行的方式比较文本文件的异同处。如果源文件和目标文件都是目录,则
diff 比较两个目录中相应的文件,按照字母次序排序。diff 的输出用法有 3 种,包括
列举模式、命令模式和上下文模式,其中命令模式又分为两种,即 ed 命令模式和 RCS
(Revision Control System,版本控制系统)命令模式
相关文章
|
12天前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
97 6
|
13天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
52 3
|
13天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
39 2
|
8天前
|
运维 监控 网络协议
运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面
本文介绍了运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面,旨在帮助读者提高工作效率。从基本的文件查看与编辑,到高级的网络配置与安全管理,这些命令是运维工作中的必备工具。
36 3
|
13天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
48 3
|
5月前
|
Linux
Linux部署04-ls命令的参数和选项,主体,参数,选项,ls / 查看根目录下的文件夹,-a的意思是列出全部选项 ls -a home全部文件,.代表着隐藏的文件夹,-l 选项,以列表竖向的形式展
Linux部署04-ls命令的参数和选项,主体,参数,选项,ls / 查看根目录下的文件夹,-a的意思是列出全部选项 ls -a home全部文件,.代表着隐藏的文件夹,-l 选项,以列表竖向的形式展
|
5月前
|
Linux
Linux部署 cd-pwd命令,cd 不写参数 就直接回到用户的HOME目录,pwd 查看当前的工作目录,pwd是常看当前目录的路径,无参数
Linux部署 cd-pwd命令,cd 不写参数 就直接回到用户的HOME目录,pwd 查看当前的工作目录,pwd是常看当前目录的路径,无参数
|
5月前
|
Linux
Linux02---命令基础 Linux命令基础, ls命令入门,ls命令参数和选项,命令行是一种以纯字符操作系统的方式,command命令本身,options命令的细节行为,parameter命令的
Linux02---命令基础 Linux命令基础, ls命令入门,ls命令参数和选项,命令行是一种以纯字符操作系统的方式,command命令本身,options命令的细节行为,parameter命令的
|
7月前
|
安全 网络协议 Linux
【专栏】Linux系统中ping命令的使用,包括其基本语法、输出信息、常用参数及高级用法
【4月更文挑战第28天】本文详细介绍了Linux系统中ping命令的使用,包括其基本语法、输出信息、常用参数及高级用法。通过ping,用户可测试网络连通性、诊断故障及评估性能。此外,文章还讨论了ping在不同协议、模拟网络环境及与其他命令结合使用时的场景。注意防火墙和网络环境可能影响ping结果,理解错误信息有助于网络问题排查。熟练掌握ping命令,能助你成为Linux网络专家。不断学习和实践,提升网络技能,为构建稳定网络环境贡献力量。
543 0
|
7月前
|
Kubernetes Linux Shell
Linux |奇怪的知识---complete命令---你不知道的命令参数补全---kubectl命令的参数补全
Linux |奇怪的知识---complete命令---你不知道的命令参数补全---kubectl命令的参数补全
159 0
下一篇
无影云桌面