sublime text无安全原生命令一键删空行或非相邻重复行:删空行须用^s$而非^$,去重需正则^(.$)\n(?=.*^\1$)配合预处理,大文件应切终端用awk保序处理。

Sublime Text 没有真正“一键删空行”或“一键删所有重复行”的安全原生命令——Remove Duplicate Lines 只处理相邻重复,Sort Lines: Unique 必然打乱顺序,而空行清理若用错正则,会漏删、误删甚至破坏代码结构。
删空行必须用 ^s*$,不是 ^$
很多人以为 ^$ 就能清空行,结果复制粘贴来的文本里带缩进空格或制表符,那些“伪空行”全被放过。^s*$ 才是正确解法:它匹配从行首到行尾**只有空白字符(空格、 、
、
)或完全为空**的行。
-
^s*$在 Sublime 中默认按行锚定,天然兼容LF和CRLF,不用额外处理换行符 - 千万别勾选
. matches newline:一勾上,.就会跨行吞内容,^和$失效,整段可能被误删 - 替换框必须留空——填
会导致空行翻倍;留空才是真删除整行(含其换行符) - 文件末尾没换行符时,
^s*$仍能匹配并删掉最后一行的“视觉空行”,不会残留异常
删非相邻重复行只能靠 ^(.*$)
(?=.*^$) 正则
这个正则不是“删所有重复”,而是“删后续重复行,保留第一次出现的那行”。它依赖预处理,否则高亮错位、漏匹配、甚至卡死。
- 必须先统一换行符:菜单 →
File → Line Endings → Unix,否则^/$在文件里会错位 - 查找面板中勾选
Regular Expression和Whole Line;若文本含多行内容(如注释块),还要点右下角.*启用. matches newline - 输入
^(.*$) (?=.*^$)后,先点Find All看匹配数——如果还有残留,大概率是尾部空格干扰,先跑一遍s+$→ 空字符串 清理再试 - 别直接
Replace All:大文件(>5 万行)容易卡死。推荐Find All→Ctrl+Shift+L转多光标 →Delete,可控且可中断
大文件或复杂场景别硬扛内置功能
超过 10MB 的日志、生成代码或含混合编码/BOM 的配置文件,Sublime 的正则和排序极易假死或丢数据。这时候该切终端。
- 保序去重(留第一处):
awk '!seen[$0]++'——自动忽略 BOM,兼容混合换行符,不卡顿 - 忽略大小写:
awk '{low = tolower($0); if (!seen[low]++) print}' - 删空行:
awk 'NF' file(NF非零即非空行) - 处理完直接粘贴回 Sublime,比插件更稳,且结果确定
最易被忽略的其实是边界判断:文件末尾是否该保留换行符、带空格的“伪空行”算不算空行、大小写是否该归一——正则只是执行工具,语义得人来定,不能交给一键操作兜底。











