sublime text精准删除固定列位置需用正则^.{11}(.{4})并启用regex模式,其中^锚定行首、.{11}跳过前11字符、(.{4})捕获目标4字符后替换为空;列数从1起算,空格和tab均计为1字符,tab须显式写为\t,跨列删除应改用alt+鼠标列选择或ctrl+shift+↓扩展选区。

用正则替换精准定位列位置
Sublime Text 的批量删除不是靠“选中多行再删”,而是靠正则表达式匹配固定列位置。关键在于:必须启用 regex 模式(右下角点击 .* 图标),并用 ^ 和 {n} 锚定列数。
比如要删每行第 12 到第 15 个字符(含),搜索框填:^.{11}(.{4}),替换框留空。这里 ^ 保证从行首算起,.{11} 跳过前 11 位,(.{4}) 捕获目标 4 字符,替换为空就实现了“精准切除”。
- 注意:列数从 1 开始计,不是 0;空格、制表符都算 1 个字符
- 如果目标位置含换行或 Tab,需显式写成
\t或\n,不能依赖. - 先
Ctrl+F→Find All确认高亮是否准确,再点Replace All
处理带 Tab 的对齐文本时的坑
很多日志或 CSV 数据用 Tab 对齐,但 . 默认不匹配 Tab,直接用 ^.{n} 会错位。这时候必须把 Tab 显式纳入计算。
例如字段分隔符是 Tab,想删第 3 列(即第 2 个 Tab 后、第 3 个 Tab 前的内容),不能靠字符数硬算,得用:\t[^\t]*\t 匹配整个第 3 列(含前后 Tab),再用捕获组提取中间部分单独删。
- 开启
regex后,\t才能被识别;关闭状态下输入\t就是字面两个字符 - 用
Ctrl+Shift+P→Convert Indent to Spaces可先把 Tab 统一转空格,避免正则行为不一致 - 测试时打开
View → Show Console,粘贴一行样例进 console 用re.findall()验证正则逻辑
跨行删除?别用正则,改用列选择模式
正则的 ^ 和 $ 是按单行工作的,无法跨行“竖着删”。真要删多行同一列(比如所有行第 8 列),得用 Sublime 的列选择:
- 按住
Alt(Windows/Linux)或Cmd+Shift(macOS),鼠标拖出矩形选区 - 松手后直接按
Delete或Backspace,只删选中的纵向区域 - 如果行数太多拖不动,先
Ctrl+L全选所有行,再Ctrl+Shift+L拆成行末光标,最后Ctrl+→移动光标到目标列,按Ctrl+Shift+↓扩展列选区
这个操作不依赖内容,只依赖光标位置,比正则更稳,尤其适合整齐表格类文本。
替换后格式错乱?检查换行符和缩进设置
批量删完发现缩进塌了、换行没了,大概率是文件用了 CRLF(Windows)而 Sublime 当前设为 LF(Unix)。替换过程会把 \r\n 中的 \r 当普通字符处理,导致行尾异常。
- 底部状态栏看当前换行符类型,点击切换成匹配源文件的格式(如显示
DOS就别切Unix) - 删完若出现
^M符号,说明\r残留,搜\r替换为空即可 - 列选择删除后自动补空格?关掉
Preferences → Settings里的"trim_automatic_white_space": true
列位置操作本质是“字符级手术”,没所谓“智能感知语义”,错一位,整片数据就偏移——动手前务必用小样本验证。











