今天为大家介绍一下文件比对的四种方法:
comm,egrep,diff,vimdiff
话不多说,我们首先创建两个文件:
![]() |
![]() |
1.comm
无参数:comm 1 2 #对比文件1、2
![]() |
♥第一列表示仅在文件1中出现的行
♥第二列表示仅在文件2中出现的行
♥ 第三列表示文件1、2中相同的行
注:comm 在进行文件比较时,文件要先进行排序。
⏩ 参数-1:comm -1 1 2
#对比文件1、2,不显示文件1 出现的内容
![]() |
另外comm 的其他参数分别表示:
⏩ -2:不显示文件2 中出现的内容
⏩ -3:不显示文件1,文件2 中相同的内容
我们还可以根据需要进行组合,例如:
⏩ 参数-12:comm -12 1 2
#只显示文件1、2中相同的部分
![]() |
2、egrep
egrep –f 1.txt 2.txt,与comm -12 功能一样。
显示文件1、2中相同的行。
![]() |
egrep –f 1.txt –v 2.txt,与comm -13 功能一样,显示仅文件2中出现的行。
![]() |
egrep –f 1.txt –v 2.txt,与comm -13 功能一样,显示仅文件2中出现的行。
3、diff
无参数:diff 1.txt 2.txt
![]() |
分析结果前,我们要明白一些符号的含义:
⏩ a=add、c=change、d=delete;
⏩ “<”表示文件1中,“>”表示文件2中。
⏩ 3a4表示文件1的第三行后添加内容后与文件2的第4行相应,
⏩ 添加的内容即为cut,
⏩ > 表示存在文件2中。
⏩ 5c6,7表示文件1的第5行改成文件2的第6,7行后两文件内容一致,
⏩
⏩ > touch > mkdir 表示文件2中6,7行的内容,用---分隔。
参数-c:diff 1.txt 2.txt –c
![]() |
⏩ 参数c为context模式,结果更直观一点,
⏩ +表示文件1加上文件2中此行的内容cut后,内容匹配;
⏩ !表示文件1需要修改的行,修改后两文件相匹配。
注:diff的结果需记住符号所代表的含义,直观性不强。vimdiff就可以很好的解决这个问题。
vimdiff 1.txt 2.txt
![]() |
整体命令简单,结果清晰明了,屏幕垂直分开。
左侧为文件1,右侧为文件2;
两文件共有行但内容不同是背景色为紫色,红色突出内容的不同;
若仅在一个文件中出现的行,背景色为蓝色,另一文件中对应的位置,背景色为绿色。
comm、egrep、diff和vimdiff各有优缺点,适用于不同的情况。希望通过本文的汇总,在文件对比时根据需求,大家能将其灵活的运用。