主要介绍下在 Linux 中,与文本处理相关的命令。
diff & patch
该命令通常用于文本文件的区别查看。
假设文件 A 和文件 B ,其中 A 为原文件, B 为修改后的文件,经过 diff 之后生成了补丁文件 C ,那么着个过程相当于 A - B = C ,那么 patch 的过程就是 B + C = A 或 A - C = B。
也就是说,如果简单使用 diff A B > C,那么只能用 patch A C,使用 patch B C 将出现错误,如果想恢复则应该使用 patch -RE A C。
格式
其中简单示例如下:
常用操作
patch 使用时不用指定文件,在补丁文件中已经记载了原文件的路径和名称。
另外需要通过 -pn 来处理补丁中的路径问题,如 dir/dirA/A 、 dir/dirB/B ,在 dir 目录下执行 $ diff -rc dirA dirB > C,此时 C 中记录的路径为 dirA/A ;此时如果在 dirA/ 目录下,那么应该使用 patch -p1 ,即忽略 dirA/ 。
补丁失败的文件会以 .rej 结尾,下面命令可以找出所有 rej 文件, find . -name ‘*.rej’ 。
cmp
二进制文件的比较。
cmp 命令会逐字节比较两个文件内容,如果两个文件内容完全,则 cmp 命令不显示任何内容。若两个文件内容有差异,会显示第一个不同之处的字节数和行数编号。
如果文件是 ‘-‘ 或没给出,则从标准输入读入内容。
文件相同只返回0;文件不同返回1;发生错误返回2。
第一行的结果表示 file1 与 file2 内容在第 6 行的第 23 个字符开始有差异。第二行的结果表示 file2 前半部分与 file1 相同,但在 file2 中还有其他数据。