在写代码的过程中,我们难免会对代码进行一些修改。但是,经常会出现修改后,不知道修改后和源文件有什么区别的情况。这里,我们需要一个文本比较工具来进行文本比较。有经验的程序员都知道Windows下有一个非常好用的文本比较工具——BeyondCompare。但是是付费软件,很多正规公司是不允许使用破解软件的。而且,它只能在Windows下使用,没有Linux版本。本文介绍的文本比对方法不需要任何软件,只需要一条Linux命令。学会这个命令,你就不会再怕不知道怎么比对文本了。这个Linux命令就是diff命令。diff是Unix系统一个非常重要的工具程序。它用于比较两个文本文件之间的差异,是代码版本管理的基石之一。首先,让我们看一下它的基本命令格式。diff[OPTION]...FILES非常简单。但它有太多选择,让你怀疑生活。暂时先不管这么多,先学习一些最常用的吧,毕竟时间花在刀刃上。-b——忽略一行中空字符的区别(例如,“HelloWorld!”被认为与“HelloWorld!!”相同)-B——忽略空行-i——忽略大小写的区别-r——如果diff后面跟一个目录,则递归比较子目录下的文件。让我们看看如何详细比较文本。diff命令的输出格式有三种:普通格式(normaldiff)、上下文格式(contextdiff)和组合格式(unifieddiff)。我们通过实例详细介绍这三种输出格式。比如我们现在有一个文件a.c,它的内容如下:现在我们复制一份,命名为b.c,将第3行的小写“hello”改为大写“HELLO”,如下:1.普通格式中normalformat我们不用加任何选项,直接对比如下:diffa.cb.c执行结果如下:我们逐行解释一下上图的意思。第一行:3c3前面的3表示文件a.c中的第三行发生了变化,后面的3表示a.c通过变化变成了b.c中的第三行。中间的c是具体的变化。c表示改变(change),其他类型包括d删除(delete),a增加(addition)。第二行:<你好世界!表示去掉a.c文件中第三行的内容,小于号表示去掉。第三行:------分隔线第四行:>HELLOworld!表示在b.c文件中增加第三行内容,大于号表示增加。2.上下文格式由于普通格式的提示相对较少,我们无法快速定位到修改的地方,往往需要打开文件才能知道修改的细节。因此,为了提供更多信息,引入了上下文格式。其使用命令如下:diff-ca.cb.c其中,c表示context,意为上下文。上图中输出结果的具体含义如下:第1行和第2行分别表示修改前后的文件和更新时间。后面的1,4*表示a.c文件中显示的第1行到第4行的内容。helloworld前面的感叹号(!)表示该行被更改,如果删除该行,则为减号(-),如果添加该行,则为加号(+)。以下几行具有相似的含义。3.合并格式这种格式是普通格式和上下文格式的综合版本,这种格式也是gitdiff使用的格式。使用该格式的命令为:diff-ua.cb.c上图中输出结果的详细含义如下:第1行和第2行表示修改前后的文件和更新时间。以下-helloworld!表示原文件a.c中的内容,+HELLOworld!表示b.c.中的内容除了以上三种格式外,还有一种更直观的并排格式。这种显示格式的命令格式如下:diffa.cb.c-y-W50这种格式是并行显示的,也很直观清晰。在第3行,有一个“|”符号,表示此行已更改。另外,如果前面有“<”,表示后面的文件比前面的文件少了1行;如果是“>”,表示后一个文件比前一个文件多了1行。本文经授权转载自公众号“良墟Linux”。世界500强外企Linux开发工程师梁旭,在公众号分享大量Linux干货,欢迎关注!
