每天一个 Linux 命令(11)—— diff

这是我参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战

命令简介

diff 命令主要用于逐行比较两个指定的文件,显示文件之间的差异。也可以逐对比较两个目录中的相应文件。如果两个文件相同,diff 命令通常不会输出任何信息;如果两个文件不同,diff命令将会以不同的方式(取决于命令行选项)显示两个文件的不同点。

最新版本的 diff 命令还支持二进制文件比较。

命令格式

diff[参数][文件1或目录1][文件2或目录2]
复制代码

命令参数

参数 解释
-a,--text 把所有文件当作文本文件处理,逐行比较。
-b,--ignore-space-change 比较时忽略因空格数量的多少而引起的差别。
-B,--ignore-blank-lines 比较时忽略因空行而引起的差别。
-c,-C num,--context[=num] 首先输出两个文件的名字与修改时间等信息,其次输出第一个和第二个文件以起始行和终止行表示的数据行范围,最后输出不同的数据行及前后相邻的 num 行数据。num 的默认值为 3。
-d,--minimal 尽可能找出文件之间的微小差异。这个选项会影响 diff 命令的运行速度。
-e,--ed 针对两个文件的差别,输出一个 ed 脚本文件,利用其中提供的 ed 编辑命令,能够确保两个文件一致。
-E,--ignore-tab-expansion 比较时忽略因制表符展开而引起的差异。
-i,--ignore-case 比较时忽略大小写字母的差异。
-I regexp,--ignore-matching-lines=regexp 比较时忽略两个文件中均匹配指定模式的数据行。
-l,--paginate 把比较结果传递给 pr 命令,形成一个标记时间、命令行和页码标题的输出形式,写到标准输出。
-N,--new-file 把不存在的文件作为空文件处理。
-q,--brief 仅当文件不同时才输出文字说明信息(文件相同时不显示任何信息)。可用于比较二进制数据文件。
-r,--recursive 按目录方式逐队比较文件时,递归地处理两个目录中的任何子目录。
-s,--report-identical-files 如果两个文件相同,输出文字说明信息。如果两个文件不同,按常规处理,显示存在差异的数据行。
-S file,--starting-file=file 比较目录时,从指定的文件开始逐一比较。可用于恢复中断的比较。
-t,--expand-tabs 展开制表符,输出适当数量的空格。
-T,--initial-tab 在输出的数据行之前插入一个制表符。
-u,-U num,--unified[=num] 同 -c 选项,只是以起始行与输出行数替代数据行范围。
-w,--ignore-all-space 比较时忽略所有的空格字符。
-W num,--width=num 指定数据显示的最大行宽,默认的行宽为 130 列。
-x pattern,--exclude=pattern 按目录方式比较时,忽略基本文件名部分(不含目录)匹配指定模式的文件或子目录。
-X file,--exclude-from=file 按目录方式比较时,忽略基本文件名部分(不含目录)匹配指定文件中包含的任何模式的文件或子目录。
-y,--side-by-side 采用两列的形式显示文件之间的差异。
--from-file=file1 使用指定的文件作为第一个文件参数,与其他文件进行比较。注意,指定的文件可以是一个目录。
--to-file=file2 使用指定的文件作为第二个文件参数,与其他文件进行比较。注意,指定的文件可以是一个目录。
--ignore-file-name-case 比较文件名时,忽略大小写字母的差异。
--left-column 指定 -y 选项两列显示时,再指定此选项表示仅在左边第一列输出相同的数据行,第二列省略。
--speed-large-files 假定文件存在大量零散的微小差异,采用探索法加速处理这样的大型文件。
--strip-trailing-cr 删除输入数据行尾的回车字符。
--suppress-common-lines 禁止输出两个文件相同的数据行(默认的做法)。
--unidirectional-new-file 把不存在的第一个文件作为空文件处理。

应用实例

  1. 比较两个文件
$ cat file1.txt
1001
1002
1003

$ cat file2.txt
1001
1002
1003a
1004

$ diff file1.txt file2.txt
3c3,4
< 1003
---
> 1003a
> 1004
复制代码

上面的 3c3,4 表示 file1.txt 和 file2.txt 文件在 3 行和第 4 行内容有所不同;

diff 的 normal 显示格式有三种提示:

  • a:add
  • c:change
  • d:delete

参考文档

  • diff命令
  • 《Linux 常用命令简明手册》—— 邢国庆编著

Guess you like

Origin juejin.im/post/7031179173360042014