linux文本处理三

diff

diff命令用来显示文件之间的差异。diff支持多种输出格式,同时diff一次能处理许多文件。

diff一般被用来检测多个版本源代码之间的更改,然后将旧版本转变成新版本,diff还能递归的检查源码目录,称为源码树。diff命令的一个常见的应用就是创建diff文件或者补丁,然后使用patch程序将文件从一个版本转换成另外一个版本。





diff默认输出解析

在默认的输出中,每一组更改之前都是一条更改命令,命令格式是:

【原始文件的行号或者行的范围】【行为】【目标文件的行号或者行的范围】

这里的行为可以是以下三种:

1.a表示对原始文件进行行新增

2.d表示对原始文件进行行删除

3.c表示对原始文件进行修改

r1ar2:把第二个文件中位置 r2 处的文件行添加到第一个文件中的r1 处。
r1cr2:用第二个文件中位置 r2 处的文本行更改(替代)位置 r1 处的文本行。
r1dr2:删除第一个文件中位置 r1 处的文本行,这些文本行将会出现在第二个文件中位置 r2 处。

"<"表示需要删除的行

">"表示需要新增的行


除了默认的输出格式,输出还有上下文模式(将源文件和目标文件分开展示)和统一模式(将源文件和目标文件结合展示)

上下文模式:上下文模式使用-c选项来指定(context)


第一个文件的内容使用*来标识,第二个文件的内容使用-来标识。

  • blank:上下文显示行。它并不表示两个文件之间的差异。
  • - :删除行。这一行将会出现在第一个文件中,而不是第二个文件内。
  • +:添加行。这一行将会出现在第二个文件内,而不是第一个文件中。
  • ! :更改行。将会显示某个文本行的两个版本,每个版本会出现在更改组的各自部分。
统一模式:统一模式使用-u选项来指定(uniform)

  • blank:两个文件都包含这一行。
  • -:在第一个文件中删除这一行。
  • +:添加这一行到第一个文件中。
使用diff和patch将文件从一般版本转换成新的版本

  1. diff -Naur old_file new_file > diff_file  (u:unified,a:text,N:num,r:recursive)
  2. patch < diff_file

从上图可以看出,当使用patch将原始文件转换后,再使用diff命令比较旧文件和目标文件不会产生diff信息。


tr

tr命令是基于字符的查找和替换操作。tr从标准输入接收数据,将处理过的数据输出到标准输出。

tr的用法是:tr 【选项】 【原始字符集合】 【目标字符集合】

基本的选项如下:

  • -d:删除原始字符集合中的字符
  • -c:用目标字符集合中的字符去替换原始的字符集合
  • -s:将标准输入中的数据按照原始集合的字符进行压缩
字符集合可以有以下三种表示方法:
  • 枚举列表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
  • 字符域:A-Z 。注意这种方法有时候面临与其它命令相同的问题,归因于语系的排序规则,因此应该谨慎使用。
  • POSIX 字符类:[:upper:]
tr的其中一个用法就是删除dos文件中的^M,命令为
tr -d  '\r'  filename > newfile

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值