linux下比较两个文本文件的不同——diff命令

本文详细介绍Linux下Diff命令的使用方法及常见选项,包括文件比较、生成patch文件等实用技巧。

1>Diff命令的功能
Linux中Diff命令的功能为逐行比较两个文本文件,列出其不同之处。它对给出的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序。

2>语法
diff [options] file1 file2

该命令告诉用户,为了使两个文件file1和file2一致,需要修改它们的哪些行。如果用”-”表示file1或file2,则表示标准输入。如果file1或file2是目录,那么diff将使用该目录中的同名文件进行比较。

3>[options]主要参数

-a:将所有文件当作文本文件来处理。

-b或–ignore-space-change  忽略空格造成的不同。

-B或–ignore-blank-lines  忽略空行造成的不同。

-c:使用纲要输出格式。

-H:利用试探法加速对大文件的搜索。

-I:忽略大小写的变化。

-n –rcs:输出RCS格式。

-N或–new-file  在比较目录时,若文件A仅出现在某个目录中,会显示:Only in目录;文件A若使用-N参数,则diff会将文件A与一个空白的文件比较。

-r或–recursive  比较子目录中的文件。

-u,-U<列数>或–unified=<列数>  以合并的方式来显示文件内容的不同。

4>使用方法的实例说明

例如: diff /usr/xu mine

把目录/usr/xu 中名为mine的文件与当前目录中的mine文件进行比较。

通常输出由下述形式的行组成:

n1 a n3,n4

n1,n2 d n3

n1,n2 c n3,n4 这些行类似ed命令把filel转换成file2。字母(a、d和c)之前的行号(n1,n2)是针对file1的,其后面的行号(n3,n4)是针对file2的。字母a、d和c分别表示附加、删除和修改操作。

在上述形式的每一行的后面跟随受到影响的若干行,以”<”打头的行属于第一个文件,以”>”打头的行属于第二个文件。

diff能区别块和字符设备文件以及FIFO(管道文件),不会把它们与普通文件进行比较。

如果file1和file2都是目录,则diff会产生很多信息。

5>diff最常用的功能

diff有很多功能平时我们不常用到,最常用的功能莫过于生成patch文件了:

diff -urN old/ new/ > mysoft.patch
参数 -u 表示使用 unified 格式,-r 表示比较目录,-N 表示将不存在的文件当作空文件处理,这样新添加的文件也会出现在patch文件中。

然后在需要应用patch的地方使用下述命令即可:

patch -p0 < mysoft.patch

diff的 -y 命令(长格式为 –side-by-side)可以将屏幕分成左右两部分,来比较两个文件之间的差异。许多图形化的比较工具都有这个功能,但如果只能使用命令行,这个参数就相当有用了。如果要改变左右各部分的宽度,可以通过 -W (–width)参数来指定。
–ignore-blank-lines 参数可以不检查空白行。这样DOS格式和Unix格式的文件互相比较时,就不至于因为换行符不一致而出现大量的差异。
本文来源于时光漂流瓶 http://www.9usb.net , 原文地址: http://www.9usb.net/200903/linux-diff.html 

转载于:https://www.cnblogs.com/genggeng/p/7520845.html

### Linux 文本处理命令概述 在 Linux 系统中,`sort`, `uniq`, `cut`, `comm`, 和 `diff` 是常用的文本处理工具。这些命令可以帮助用户对数据进行排序、去重、提取字段以及比较差异。 #### 1. **Sort** `sort` 命令用于对文件中的每一行按照字母顺序或其他指定条件进行排序。 ```bash sort file.txt ``` 上述命令会读取 `file.txt` 文件并将其中的内容按升序排[^1]。如果需要忽略大小写,则可以加上 `-f` 参数: ```bash sort -f file.txt ``` 还可以通过 `-n` 参数实现数值排序: ```bash sort -n numbers.txt ``` #### 2. **Uniq** `uniq` 命令通常与 `sort` 结合使用,用来去除相邻重复的行。需要注意的是,输入的数据必须先经过排序才能有效工作。 ```bash sort file.txt | uniq ``` 此命令首先会对 `file.txt` 进行排序,然后再移除连续相同的行[^5]。若要统计每种条目的出现次数,可附加参数 `-c`: ```bash sort words.txt | uniq -c ``` #### 3. **Cut** 当只需要从每行抽取特定部分时,`cut` 就显得非常有用。它可以基于字符位置或者分隔符来选取子串。 - 使用号切割字符串: ```bash cut -c 1-5 file.txt ``` 这表示截取第1至第5个字符[^4]。 - 如果是以逗号作为定界符获取第二栏的信息: ```bash cut -d ',' -f 2 data.csv ``` #### 4. **Comm** 对于两个已排序表间的共同项分析,`comm` 提供了一个简便的方法。它能够指出哪些元素仅存在于某个集合里或是两者共有的成员。 假设我们有两个分别存储用户名单的小文档 A 和 B: ```bash comm sortedA.txt sortedB.txt ``` 默认情况下,该指令会在三展示结果——左边代表独属于第一个档案里的项目;中间则是双方都拥有的记录;右边则举第二个档案独有的成分[^3]。 #### 5. **Diff** 最后提到的就是对比不同版本间变化情况不可或缺的好帮手 —— `diff`. 它不仅可以告诉你哪几行发生了变动,还能标记新增加或删减掉的部分。 简单示例如下所示: ```bash diff old_version new_version ``` 这样就可以清晰看到新旧两份材料之间存在的区别之处了[^2]. ```python import os os.system('diff --help') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值