教你一招Linux下文本比对方法
我们在写代码的过程中,免不了会对代码进行一些修修改改。但经常会出现改着改着,就不知道改完后与源文件的差异是怎样的。这里,我们就需要一个文本比对工具来进行文本比对。
有经验的程序员都知道,Windows下有个很好用的文本比对工具——BeyondCompare。但它是收费软件,很多正规的公司是不允许使用破解软件的。而且,它也只能在Windows下使用,没有Linux版本。
本文所介绍的文本比对方法,无需任何软件,只需一个Linux命令。学会这个命令,妈妈就再也不怕你不会文本比对了。
这个Linux命令就是diff命令。
diff是Unix系统的一个很重要的工具程序。它用来比较两个文本文件的差异,是代码版本管理的基石之一。
首先我们来看它的基本命令格式。
diff [OPTION]... FILES
很简单吧。不过它的选项相当多,多到你怀疑人生。我们暂且不管那么多,先学一些最常用的,毕竟时间要花在刀刃上。
-b —— 忽略一行中的空字符的区别(例如“Hello World!” 与 “Hello World!!”认为是一样的)
-B —— 忽略空白行
-i —— 忽略大小写的不同
-r —— 如果diff后面接的目录时,会递归比较子目录中的文件不同
我们再来具体看看如何进行文本比较。
diff命令的输出格式有三种:
(1)正常格式(normal diff)
(2)上下文格式(context diff)
(3)合并格式(unified diff)
我们通过实例详细介绍这三种输出格式。比如我们现在有个文件a.c,它的内容如下:

现在我们复制一份,命名为b.c,并将第3行小写的"hello"改为大写“HELLO",如下:

(1)正常格式
正常格式下我们无需加任何选项,直接如下比对就好:
diff a.c b.c
执行完的结果如下:

我们一行一行来解释上图的含义。
行一行:3c3
第一个3表示文件a.c中第3行有变化,后面的3表示a.c通过变化成为b.c中的第3行。中间的c就是具体的变化了。c表示改变(change),其它类型还有d删除(delete),a增加(addition)。
第二行:< hello world!
表示a.c文件中去除第3行的内容,其中小于号表示去除。
第三行:------
分隔线
第四行:> HELLO world!
表示b.c文件中增加第3行的内容,其中大于号表示增加。
(2)上下文格式
由于在正常格式下,提示信息比较少,我们无法快速定位所修改的地方,经常需要打开文件才知道修改细节。所以,为了给出更多的信息,引入了上下文格式。它的使用命令如下:
diff -c a.c b.c
其中,c表示context,即上下文的意思。

上图的输出结果的具体含义如下:
第1行和第2行表示修改前及修改后的文件及更新时间。下面的*** 1,4 ****表示a.c文件显示的从第1行开始到第4行为止的内容。hello world前的叹号(!)表示该行有改动,如果该行被删除,则为减号(-),如果该行被增加,则为加号(+)。后面几行的含义类似。
(3)合并格式
这种格式是正常格式与上下文格式的综合版,同时这种格式也是git diff所采用的格式。使用这种格式的命令是:
diff -u a.c b.c

上图的输出结果详细含义如下:
第1行和第2行表示修改前及修改后的文件及更新时间。后面的-hello world!表示原文件a.c里的内容,+HELLO world!表示b.c里的内容。
除了以上三种格式外,还有另外一直更直观的方式——并排格式。这种显示格式的命令格式如下:
diff a.c b.c -y -W 50

这种格式就是以并列的格式进行显示,也很直观明了。第3行里,有个“|”符号,表示这行有更改。另外,如果前面是“<”,表示后面文件比前面文件少了1行内容;如果是">",表示后面文件比前面文件多了1行内容。
更多精彩内容,请关注公众号良许Linux,公众内回复1024可免费获得5T技术资料,包括:Linux,C/C++,Python,树莓派,嵌入式,Java,人工智能,等等。公众号内回复进群,邀请您进高手如云技术交流群。
公众号:良许Linux

有收获?希望老铁们来个三连击,给更多的人看到这篇文章
教你一招Linux下文本比对方法的更多相关文章
- 一步一步教你如何在linux下配置apache+tomcat(转)
一步一步教你如何在linux下配置apache+tomcat 一.安装前准备. 1. 所有组件都安装到/usr/local/e789目录下 2. 解压缩命令:tar —vxzf 文件名(. ...
- 在Linux下禁用IPv6的方法小结
在Linux下禁用IPv6的方法小结--http://www.jb51.net/LINUXjishu/335724.html 这篇文章主要介绍了在Linux下禁用IPv6的方法小结,禁用IPv6的操作 ...
- linux下定时执行任务方法【转】
之前就转过一篇关于定时任务的文章,前俩天用,还的翻出来看!!!再转一次,备用,,需要的时候不用麻烦找! ----------------------------------------------- ...
- Windows 和 Linux 下 禁止ping的方法
Windows 和Linux 下 禁止ping的方法 目的: 禁止网络上的其他主机或服务器ping自己的服务器 运行环境: Windows 03.08 linux 方法: Windows 03下: ...
- Linux下修改PATH的方法
Linux下修改PATH的方法 1.直接在命令行里敲 PATH=$PATH:/path1:/path2:/pathN用户登出之后PATH恢复原样. 只是临时起作用. 2.修改~目录下bash_prof ...
- linux下的ImageMagick安装方法
linux下的ImageMagick安装方法 由于没有图形化界面的支持,在Linux(CentOS 6.4 x64)上的配置相对Windows XP还是麻烦了一点. 1.下载ImageMagi ...
- Linux下彻底卸载LibreOffice方法
Linux下彻底卸载LibreOffice方法 终端中输入命令: 对所有基于 Debian 的发行版(Debian.Ubuntu.Kubuntu.Xubuntu.*buntu.Sidux 等): su ...
- Linux 下文本查找技巧你掌握了吗?
前言 之前介绍过很多linux下查找相关的命令,例如<Linux中的文件查找技巧>,<find命令高级用法>,<如何查看linux中文件打开情况-lsof命令>等等 ...
- linux下软件安装的方法
linux下软件的安装与卸载 第一章 linux下安装软件,如何知道软件安装位置 注:一般的软件的默认安装目录在 jdk-1_6_0_14-linux-i586-rpm.bin ←修改为 ...
随机推荐
- flask_restful实现文件下载功能
环境:前后端完全分离,后端flask_restful,前端vue from flask_restful import reqparse, Resource from flask import send ...
- 理解RESTful原理
如何给老婆解释什么是RESTful 老婆经常喜欢翻看我订阅的技术杂志,她总能从她的视角提出很多有趣的问题. 一个悠闲的周日下午,她午觉醒来,又习惯性的抓起这个月的杂志,饶有兴趣地看了起来. 果不其然, ...
- 微信小程序-人脸识别
wx.checkIsSupportFacialRecognition({success:res=>{ wx.startFacialRecognitionVerifyAndUploadVideo( ...
- JavaScript学习系列博客_5_JavaScript中的强制类型转换
-强制类型转换为String 1.方式1 调用被转换数据的toString()方法 number类型值.布尔类型值.都可以调用toString()方法强制转换.但是null值和undefined值不行 ...
- js中的寄生组合继承
function inheritProperty(subType, superType) { function F(){} F.prototype = superType.prototype; sup ...
- badger 一个高性能的LSM K/V store
原文:https://colobu.com/2017/10/11/badger-a-performant-k-v-store/ github地址:https://github.com/dgraph-i ...
- dpkg:处理 xxx (--configure)时出错解决办法
1.$ sudo mv /var/lib/dpkg/info /var/lib/dpkg/info_old //现将info文件夹更名2.$ sudo mkdir /var/lib/dpkg/info ...
- 利用JavaScript当鼠标点击导航时改变背景
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 第七篇Scrum冲刺博客--Interesting-Corps
第七篇Scrum冲刺博客 站立式会议 1.会议照片 2.队友完成情况 团队成员 昨日完成 今日计划 鲍鱼铭 各界面数据请求云函数设计及实现 代码交接及整体架构搭建 叶学涛 进行代码优化 和队友进行交接 ...
- 牛客网PAT练兵场-统计同成绩学生
题解:开100的数组,进行存储人数,方便查询 题目地址:https://www.nowcoder.com/questionTerminal/3df4810cc0664b8bb848d785f68f7c ...