sublime的sort_lines命令不解析语义,只按首非空白字符ascii值纯字符串比较,故log10.txt、log2.txt、log1.txt排序为log1.txt→log10.txt→log2.txt;需用正则补零对齐(如^(\d+)$→0000000000$1)再排序,才能实现数值序。

为什么正则预处理是排序前提
Sublime 的 sort_lines 命令不解析语义,只做纯字符串比较。直接对 log10.txt、log2.txt、log1.txt 排序,结果必然是 log1.txt → log10.txt → log2.txt(因为首字符 '1'
数字行补零:用正则一步对齐位数
适用于纯数字行或固定前缀+数字的场景(如 12、3、105 或 item1、item12、item105)。
- 选中目标行
- 按
Ctrl+H打开替换面板,勾选Regular Expression - 查找框填:
^(\d+)$(纯数字行)或^(item)(\d+)$(带前缀) - 替换框填:
0000000000$1或$1000000000$2(补足 10 位足够覆盖绝大多数场景) -
Replace All→Ctrl+F9排序 → 再用^0+(\d+)$替换为$1去前导零
注意:补零位数必须大于等于最大数字的位数;若混有 7 和 1234567890,补 5 个零会失败,补 10 个更稳妥。
忽略大小写排序:别依赖菜单,用命令或转小写
原生 Sort Lines (case insensitive) 命令存在,但不绑定快捷键,且容易和 Sort Lines (Case Sensitive) 混淆——后者是强制启用大小写敏感,不是开关。
- 最稳路径:选中后按
Ctrl+K, Ctrl+L全转小写,再Ctrl+F9 - 或打开命令面板
Ctrl+Shift+P,输入Sort Lines (case insensitive)执行 - 若需严格“只看首字母”,用正则预处理:
Ctrl+H→ 查找^(\w)→ 替换为$1\t$0→ 排序 → 再删掉\t前缀
别指望只点光标就触发——右下角状态栏必须显示类似 7 lines,否则 sort_lines 不生效。
去重前必须排序,否则正则也救不了
Sublime 原生命令 Remove Duplicate Lines(Ctrl+Shift+U)等价于 Unix uniq:只删连续重复行。原始数据是 apple、banana、apple,直接去重毫无作用。
- 保序去重(保留首次出现):用正则
^(.*$)\n(?=.*^\1$),但必须先统一换行符(File → Line Endings → Unix),并勾选. matches newline - 整行去重且接受重排:Sublime 4.4+ 可直接用
Sort Lines: Unique命令,它内部调用sort -u,一步到位 - 所有方案都要求:空行、行尾空格、BOM、混合编码提前清理,否则正则会失效或卡死
真正容易被忽略的是状态链:没排序就去重,等于白做;没转小写就混排,大小写项永远分家;没补零或装插件就排数字,10 永远在 2 前面。











