【Linux】 文本比较工具 diff和cmp

时间:2024-08-11 14:05:26

Linux 文本比较工具

■  diff命令

  diff用于逐行比较两个文本文件,列出其不同之处

  diff [option] <file1> <file2>

  file1和file2除了可以是文件名之外,也可以是:

    文件名 目录名    这样子的话自动比较目录名下和文件名同名的文件

    "-"    表示标准输入

    目录名 目录名  会搜索两个目录下同名的文件并作比较,对于各自独有的文件则说明是独有的

  可选option:

    -a  将所有文件当成文本文件处理

    -b  忽略空格造成的不同(指位于行末的空格)

    -B  忽略空行造成的不同

    -I  忽略大小写带来的不同

    -r  递归比较子目录

    -c  输出较为格式化,友好的结果。可以测试一下看具体的样式

    -N  在目录比较的时候对于一些某个目录独有的文件,不是说明其是独有的,而是把它和一个空白文件作比较

    -y  将两个文件的内容按行分屏幕居左和居右输出并比较结果,比较友好,一目了然!

    -u  将结果合并着输出,每行前有个+或者-号或什么都没有,代表着如果要把file1改变成file2那样的话,要加减哪些行,哪些行保持不变就行。也还算友好

  在没有指定上面提到的这些友好化输出参数的时候,其输出的意思是通过下面这些操作可以让file1和file2一样:

    n1 a n2,n3  表示在file1的第n1行后加上file2的第n2到n3行

    n1,n2 d n3  表示在file1中删除第n1到n2行

    n1,n2 c n3,n4  表示把file1中的n1到n2行换成file2中的n3到n4行

    上面这些表示变化的方式比较难懂且不友好,如果可以的话尽量还是加上-y之类的友好化参数比较好

■  cmp命令

  cmp比较的大多是非文本文件,比如二进制文件什么的。

  cmp <file1> <file2>

  file1和file2只能是文件,cmp返回的是两个文件从开头开始扫描发现的第一处不同的字节数和行数所在。若比较完了一个文件所有内容没发现不同,而第二个文件还有剩余时就返回一个EOF on XXX表示XXX真包含于另一个文件。如果返回None那就是说两者一模一样啦