GNU/Linux下是否有非对称diff选项?特定diff功能需求咨询
GNU/Linux下的非对称diff实现方法
你要的这种只显示a.txt中独有的行或相对b.txt修改过的行的需求,用系统自带工具就能实现,以下是几种实用方法:
用diff原生选项实现
diff本身支持通过格式控制参数实现非对称输出,执行命令:
diff --changed-group-format='%<' --unchanged-group-format='' a.txt b.txt
--changed-group-format='%<':指定两行存在差异时,只显示第一个文件(a.txt)的内容--unchanged-group-format='':让diff不输出两个文件中完全相同的行
这个命令会同时显示a.txt中修改过的行和仅在a.txt存在的行,完全匹配你的需求。
用comm命令找a.txt独有的行
如果只需要找出a.txt中完全不存在于b.txt的整行内容(修改过的行因内容不同也会被视为独有),可以用comm:
comm -23 a.txt b.txt
注意:使用comm前建议先对两个文件排序,否则可能结果不准确,比如先执行sort a.txt > a_sorted.txt、sort b.txt > b_sorted.txt,再用comm处理排序后的文件。
用grep快速筛选
grep的反向匹配功能也能实现类似效果,适合快速查找a.txt中不在b.txt里的行:
grep -Fxvf b.txt a.txt
-F:把b.txt里的内容当作固定字符串而非正则表达式-x:只匹配整行完全相同的内容-v:反向匹配,输出不匹配的行-f:从b.txt读取匹配模式
内容的提问来源于stack exchange,提问作者josinalvo
相关产品推荐
相关产品推荐

