You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在BASH中仅获取diff对比里第一个文件独有的行?

提取第一个文件独有的行的解决方案

你原来的命令存在两个关键问题:

  1. 默认diff输出的带<行包含前缀< ,直接过滤得到的不是原始行内容
  2. diff会输出---这类分隔符,干扰后续过滤逻辑

以下是三种更可靠的实现方式,按需选择:


方法1:用diff直接输出目标行(保留原行顺序)

通过diff的格式化参数,跳过冗余输出,直接生成第一个文件独有的行:

diff --changed-group-format='%<' --unchanged-group-format='' "/ripe_route_from_${place}_v4" "/unspecified_route_from_${place}_v4" > ripe_routes_diff_unspecified
  • --changed-group-format='%<':仅保留第一个文件中独有的行(自动去掉<前缀)
  • --unchanged-group-format='':完全忽略两个文件的共同行

方法2:用grep反向匹配(无需排序,保留原顺序)

适合小文件场景,直接匹配第一个文件中不存在于第二个文件的行:

grep -Fxvf "/unspecified_route_from_${place}_v4" "/ripe_route_from_${place}_v4" > ripe_routes_diff_unspecified
  • -F:将第二个文件的行视为固定字符串,避免正则表达式干扰
  • -x:强制整行精确匹配,避免部分匹配的误判
  • -v:反向输出,只保留不匹配第二个文件的行
  • -f:从第二个文件读取匹配规则

方法3:用comm命令(大文件首选,效率极高)

comm是专为有序文件对比设计的工具,处理大文件时速度远超前两种方法,但输出是排序后的行:

comm -23 <(sort "/ripe_route_from_${place}_v4") <(sort "/unspecified_route_from_${place}_v4") > ripe_routes_diff_unspecified
  • -23:屏蔽第二个文件独有的行(第2列)和两个文件的共同行(第3列),仅保留第一个文件独有的行(第1列)
  • <(sort ...):通过进程替换先对两个文件排序,满足comm对输入有序的要求

内容的提问来源于stack exchange,提问作者Navar0ne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 03:37:44