参考:https://www.runoob.com/linux/linux-comm-diff.html
diff以逐行的方式,比较文本文件的异同处。如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录。
先创建两个简单的文本:
$ cat test1
a1
a2
a3
a4
a5
a6
a7
a8
a9
a10
$ cat test2
a1
a2
a3
a5
a6
a7
a8
a9
a10
a11
a12
先不管参数,直接运行diff:
$ diff test1 test2
4d3
< a4
10a10,11
> a11
> a12
上面的4d3 表示test1 的第四行不存在test2 中。
其中test1 文件中第四行信息为a4。
10a10,11 表示test2 的第十行、十一行不存在test1 中。
其中test2 文件中第十行、十一行信息为a11、a12。
ps:感觉规律是,xdy,表示左边文件x 行多出。xay,则表示右边文件多出y 行。
我们可以使用-c 参数标记全文:
$ diff -c test1 test2
*** test1 2021-03-06 15:36:06.000000000 +0800
--- test2 2021-03-06 15:38:01.000000000 +0800
***************
*** 1,10 ****
a1
a2
a3
- a4
a5
a6
a7
a8
a9
a10
--- 1,11 ----
a1
a2
a3
a5
a6
a7
a8
a9
a10
+ a11
+ a12
还可以让它们并列比较:
$ diff -y test1 test2
a1 a1
a2 a2
a3 a3
a4 <
a5 a5
a6 a6
a7 a7
a8 a8
a9 a9
a10 a10
> a11
> a12
"|"表示前后2个文件内容有不同
"<"表示后面文件比前面文件少了1行内容
">"表示后面文件比前面文件多了1行内容
如果只想看看有没有差别,可以直接用参数-p:
diff -q test1 test2
Files test1 and test2 differ
如果想要比较目录,默认下目录下的文件需要名字相同:
diff dir1 dir2
Only in dir1: a
Only in dir2: b
常用参数
-q或--brief 仅显示有无差异,不显示详细的信息。
-c 显示全部内文,并标出不同之处。
-y或--side-by-side 以并列的方式显示文件的异同之处。
-B或--ignore-blank-lines 不检查空白行。
-r或--recursive 比较子目录中的文件。
-w或--ignore-all-space 忽略全部的空格字符。
"|"表示前后2个文件内容有不同
"<"表示后面文件比前面文件少了1行内容
">"表示后面文件比前面文件多了1行内容