Linux下diff命令用法详解
钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>
大家好,我是良许。
我们在平时工作的时候,经常要知道两个文件之间,以及同个文件不同版本之间有何异同点。在 Windows 下,有 beyond compare 这个好用的工具,而在 Linux 下,也有很多很强大的工具,良许之前也写过一篇文章介绍:
这些比对工具其实都是基于 diff
命令,下面就详细介绍一些 diff 命令的用法。
diff 命令是一个分析文件信息的命令,可以打印出文件之间的差异。它可以逐行地比较两个文件的内容,也可以递归地比较文件夹的内容。diff 命令的输出内容可以让我们知道要使两个文件相同需要做哪些修改,这对于我们的工作很有帮助。
在开始前,我们先用文件编辑器创建两个内容相同的文件。这里我们使用的是 nano 。
$ nano diffsample1
输入内容:
发布
优质的
技术文章
使用 Ctrl
+X
和 Y
保存并退出。
创建第二个文件:
$ nano diffsample2
输入同样的内容并保存退出。
需要注意的是,空格和 Tab
对两个文件是否完全相同会有影响。
使用 diff 命令查看两个文件是否有差异:
$ diff diffsample1 diffsample2
这时 diff 命令没有输出任何信息,说明这两个文件的内容是完全相同的。
现在我们对 diffsample2 做一些修改,将文章改为帖子然后保存并退出
再使用 diff 命令:
$ diff diffsample1 diffsample2
查看输出的信息:
在以上输出信息中,3c3 表示第一个文件的第三行需要被替换为第二个文件的第三行,然后为我们提示出了需要修改的内容: 技术文章 和 技术帖子
diff 命令所参考的不是第一个文件,而是第二个文件,它的输出信息有以下几种字符:
c : 表示必须做一些修改
a : 表示必须添加一些内容
d : 表示必须删除一些内容
字符前的数字表示第一个文件中的行数,字符后的内容表示第二个文件中的行数。
< 表示引用的第一个文件中的内容,而 > 表示引用的第一个文件中的内容
现在让我们交换两个文件的顺序再试试:
$ diff diffsample2 diffsample1
在交换文件顺序之后 diff 参考的文件变成了 diffsample1,提示我们将 技术帖子 修改为 技术文章 。
现在我们将 diffsample1 编辑为以下内容:
删除了第二行和第三行,再试试使用 diff 命令
$ diff diffsample2 diffsample1
现在我们可以看到,因为我们以 diffsample1 作为参考,为了使两个文件相同,我们需要删除 diffsample2 中的第二行和第三行,然后就会和 diffsample1 中的第一行内容相同。
我们再试试交换 diffsample1 和 diffsample2 的顺序:
$ diff diffsample1 diffsample2
可以看到,现在 diff 给我们的提示信息变为了在 diffsample1 中的第一行后面添加 diffsample2 中的第二行和第三行内容。
现在让我们来测试区分内容的大小写:
编辑 diffsample1 的内容为:
编辑 diffsample1 的内容为:
两个文件中唯一的区别是第三行的大小写,再试试 diff 命令
$ diff diffsample1 diffsample2
可以看到 diff 命令找出了大小写的不同,如果我们不想检查大小写,可以使用 -i 选项。
$ diff -i diffsample1 diffsample2
这时内容没有区别,diff 没有输出任何信息。
我们可以使用 -u 选项以统一的格式输出信息:
输出信息中使用 - 和 + 表示哪些内容需要被删除或者添加来使得文件内容相同。
之前提到过 diff 命令会检查空格或tab,如果我们想要忽略空格和tab,可以使用 -w 选项。
在 diffsample2 的第二行 good 后面输入一些空格和tab,并把之前的大写改回小写。
再使用 diff 命令
$ diff diffsample1 diffsample2
可以看到找出了不同,再使用 -w 忽略空格和tab,这时便没有任何输出信息了。
diff 命令还有许多选项,可以用来忽略某些情况或者更改输出等,我们可以使用 man 命令来获取更多的相关信息。
公众号:良许Linux
有收获?希望老铁们来个三连击,给更多的人看到这篇文章
- clockdiff命令_Linux clockdiff 命令用法详解:检测两台linux主机的时间差
- diffstat命令_Linux diffstat 命令用法详解:显示diff命令输出信息的柱状图
- diff命令_Linux diff 命令用法详解:比较给定的两个文件的不同
- bzdiff命令_Linux bzdiff 命令用法详解:直接比较两个.bz2压缩包中文件的不同
- set命令_Linux set 命令用法详解:显示或设置shell特性及shell变量
- jobs命令_Linux jobs 命令用法详解:显示Linux中的任务列表及任务状态
- 一起高效写代码,软件开发平台「CircleCI」获C轮3100万美元融资命令_Linux 一起高效写代码,软件开发平台「CircleCI」获C轮3100万美元融资 命令用法详解:
- skill命令_Linux skill 命令用法详解:向选定的进程发送信号冻结进程
- pkill命令_Linux pkill 命令用法详解:可以按照进程名杀死进程
- pwck命令_Linux pwck 命令用法详解:用来验证系统认证文件内容和格式的完整性
- xhost命令_Linux xhost 命令用法详解:制哪些X客户端能够在X服务器上显示
- shutdown命令_Linux shutdown 命令用法详解:用来执行系统关机的命令
- iptables-restore命令_Linux iptables-restore 命令用法详解:还原iptables表的配置
- mysqlshow命令_Linux mysqlshow 命令用法详解:显示MySQL中数据库相关信息
- telnet命令_Linux telnet 命令用法详解:登录远程主机和管理
- tracepath命令_Linux tracepath 命令用法详解:追踪目的主机经过的路由信息
- sftp-server命令_Linux sftp-server 命令用法详解:sftp协议的服务器端程序
- ifcfg命令_Linux ifcfg 命令用法详解:置Linux中的网络接口参数
- lprm命令_Linux lprm 命令用法详解:删除打印队列中的打印任务
- dpkg-trigger命令_Linux dpkg-trigger 命令用法详解:Debian Linux下的软件包触发器