教你一招Linux下文本比对方法

系统 Linux
本文所介绍的文本比对方法,无需任何软件,只需一个Linux命令。学会这个命令,就再也不怕你不会文本比对了。

我们在写代码的过程中,免不了会对代码进行一些修修改改。但经常会出现改着改着,就不知道改完后与源文件的差异是怎样的。这里,我们就需要一个文本比对工具来进行文本比对。

有经验的程序员都知道,Windows下有个很好用的文本比对工具——BeyondCompare。但它是收费软件,很多正规的公司是不允许使用破解软件的。而且,它也只能在Windows下使用,没有Linux版本。

本文所介绍的文本比对方法,无需任何软件,只需一个Linux命令。学会这个命令,就再也不怕你不会文本比对了。

[[342251]]

这个Linux命令就是diff命令。

diff是Unix系统的一个很重要的工具程序。它用来比较两个文本文件的差异,是代码版本管理的基石之一。

首先我们来看它的基本命令格式。

  1. diff [OPTION]... FILES 

很简单吧。不过它的选项相当多,多到你怀疑人生。我们暂且不管那么多,先学一些最常用的,毕竟时间要花在刀刃上。

  • -b —— 忽略一行中的空字符的区别(例如“Hello World!” 与 “Hello World!!”认为是一样的)
  • -B —— 忽略空白行
  • -i —— 忽略大小写的不同
  • -r —— 如果diff后面接的目录时,会递归比较子目录中的文件不同

我们再来具体看看如何进行文本比较。

diff命令的输出格式有三种:

  • 正常格式(normal diff)
  • 上下文格式(context diff)
  • 合并格式(unified diff)

我们通过实例详细介绍这三种输出格式。比如我们现在有个文件a.c,它的内容如下:

教你一招Linux下文本比对方法

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

教你一招Linux下文本比对方法

1. 正常格式

正常格式下我们无需加任何选项,直接如下比对就好:

  1. diff a.c b.c 

执行完的结果如下:

教你一招Linux下文本比对方法

我们一行一行来解释上图的含义。

第一行: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. 上下文格式

由于在正常格式下,提示信息比较少,我们无法快速定位所修改的地方,经常需要打开文件才知道修改细节。所以,为了给出更多的信息,引入了上下文格式。它的使用命令如下:

  1. diff -c a.c b.c 

其中,c表示context,即上下文的意思。

上图的输出结果的具体含义如下:

第1行和第2行表示修改前及修改后的文件及更新时间。下面的 1,4 *表示a.c文件显示的从第1行开始到第4行为止的内容。hello world前的叹号(!)表示该行有改动,如果该行被删除,则为减号(-),如果该行被增加,则为加号(+)。后面几行的含义类似。

3. 合并格式

这种格式是正常格式与上下文格式的综合版,同时这种格式也是git diff所采用的格式。使用这种格式的命令是:

  1. diff -u a.c b.c 

上图的输出结果详细含义如下:

第1行和第2行表示修改前及修改后的文件及更新时间。后面的-hello world!表示原文件a.c里的内容,+HELLO world!表示b.c里的内容。

除了以上三种格式外,还有另外一直更直观的方式——并排格式。这种显示格式的命令格式如下:

  1. diff a.c b.c -y -W 50 

这种格式就是以并列的格式进行显示,也很直观明了。第3行里,有个“|”符号,表示这行有更改。另外,如果前面是“<”,表示后面文件比前面文件少了1行内容;如果是">",表示后面文件比前面文件多了1行内容。

本文授权转载自公众号「良许Linux」。良许,世界500强外企Linux开发工程师,公众号里分享大量Linux干货,欢迎关注!

 

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2021-06-28 20:01:07

电脑性能Windows 7

2022-09-06 11:53:00

开发计算

2012-02-01 15:41:42

2011-05-03 11:13:51

黑盒

2020-06-22 14:18:02

运维架构技术

2020-10-20 08:01:30

MySQL密码Windows

2022-06-21 09:27:01

PythonFlaskREST API

2023-12-18 08:24:09

LinuxPythonWord

2019-01-23 10:11:43

Python爬虫IP

2018-10-10 14:34:27

ARM嵌入式系统硬件

2021-07-06 07:21:17

桥接模式组合

2010-01-06 09:54:59

2018-06-27 10:10:34

APP评分弹窗苹果

2020-11-03 16:36:36

Windows微软弹窗

2022-02-17 17:19:31

鸿蒙语音识别语音播报

2020-11-17 06:43:16

安卓智能手机移动应用

2013-07-30 11:24:33

SAP“简化IT 一招

2021-01-25 05:41:25

Flash Fliqlo软件

2021-11-22 11:30:37

JavaScript代码浏览器

2019-01-24 10:18:25

机器学习深度学习图像处理
点赞
收藏

51CTO技术栈公众号