sublime text 不支持原生差集操作,需手动模拟:小文件用正则反向匹配+多光标删除;大文件或复杂场景推荐 comm -23 命令行方案,并注意换行符、编码及空格等隐形陷阱。

Sublime 本身不支持“求差集”式提取
它没有内置的 diff 或 set difference 功能,所有“提取 A 有而 B 没有的行”操作,本质是手动模拟差集逻辑:先标记 B 中所有行,再从 A 中删掉这些匹配项。别指望 Ctrl+Shift+P 里搜 “diff” 或 “minus” 能跳出原生命令——根本不存在。
用正则反向匹配 + 多光标删行(小文件适用)
适合 A 文件 ≤ 500 行、B 文件 ≤ 200 行,且两文件都已清理过换行符和首尾空格的场景。核心思路是:把 B 的每行内容转成正则分支,再在 A 中查找并删除所有匹配行(保留未匹配的,即“不共用行”)。
- 先统一换行符:
File → Line Endings → Unix,否则^/$锚定失效 - 复制 B 全文 → 粘贴到临时标签页 →
Ctrl+H打开替换面板,勾选Regular Expression和Whole Line - 查找框填
^(.*)$,替换框填\1|(注意末尾竖线),点Replace All→ 得到形如line1|line2|line3|的字符串 - 删掉末尾多余
|,复制整个字符串(如apple|banana|cherry) - 切回 A 文件,
Ctrl+F→ 勾Regular Expression+Whole Line→ 查找框粘贴刚复制的内容,前面加^(?:,后面加)$(完整如^(?:apple|banana|cherry)$) - 点
Find All→Ctrl+Shift+L转多光标 →Delete→ 剩余行就是 A 特有行
大文件或需保序时,改用命令行更稳
超过 1 万行,或 B 含特殊字符(如 .、*、[)、或 A/B 编码/换行符不一致时,Sublime 正则极易漏匹配或卡死。这时直接终端一行命令搞定:
comm -23 <p>说明:</p>
-
comm -23表示只输出仅在第一个文件(file_a.txt)中出现的行 是进程替换,避免生成中间排序文件-
sed清掉comm可能带的前导空格(因排序后对齐需要) - 注意:两文件必须先用
dos2unix统一换行符,否则comm会把\r\n当作不同行
容易被忽略的细节
真正卡住人的从来不是步骤,而是三处隐形陷阱:B 文件里某行末尾多一个空格,A 就永远匹配不上;A 和 B 一个是 UTF-8 with BOM,一个是纯 UTF-8,comm 直接报错;正则里没关 Dot matches newline,但 B 的某行含换行符(比如日志里的堆栈),整个分支就崩。动手前花 30 秒检查这两点,比重试五次还快。











