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:上下文显示行。它并不表示两个文件之间的差异。
- - :删除行。这一行将会出现在第一个文件中,而不是第二个文件内。
- +:添加行。这一行将会出现在第二个文件内,而不是第一个文件中。
- ! :更改行。将会显示某个文本行的两个版本,每个版本会出现在更改组的各自部分。
- blank:两个文件都包含这一行。
- -:在第一个文件中删除这一行。
- +:添加这一行到第一个文件中。
- diff -Naur old_file new_file > diff_file (u:unified,a:text,N:num,r:recursive)
- patch < diff_file
从上图可以看出,当使用patch将原始文件转换后,再使用diff命令比较旧文件和目标文件不会产生diff信息。
tr
tr命令是基于字符的查找和替换操作。tr从标准输入接收数据,将处理过的数据输出到标准输出。
tr的用法是:tr 【选项】 【原始字符集合】 【目标字符集合】
基本的选项如下:
- -d:删除原始字符集合中的字符
- -c:用目标字符集合中的字符去替换原始的字符集合
- -s:将标准输入中的数据按照原始集合的字符进行压缩
- 枚举列表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
- 字符域:A-Z 。注意这种方法有时候面临与其它命令相同的问题,归因于语系的排序规则,因此应该谨慎使用。
- POSIX 字符类:[:upper:]