Sublime怎么删空行 Sublime怎么正则匹配删除空白【文本】

6次阅读

Sublime怎么删空行 Sublime怎么正则匹配删除空白【文本】

用正则直接删空行(含纯空白行)

sublime 的「Find → Replace」里开正则模式(.* 按钮点亮),搜 ^s*$n,替换成空字符串。注意:这个正则会匹配「只有空白字符(空格、制表符)+ 换行符」的行,包括真正空的行和带空格/Tab 的“假空行”。

常见错误是只写 ^n——它只能删真正空的行,遇到 n(前面四个空格)就失效;还有人漏掉末尾 n,结果替换后多出一空行,因为只删了行内容,换行符还留着。

  • 确保勾选 Wrap around,否则文件头尾可能漏处理
  • Ctrl+Shift+F 全局预览匹配项,确认没误伤带注释但无代码的行(比如 //n
  • 如果文件用 rnwindows 换行),^s*$n 仍有效;Sublime 正则引擎自动适配换行符

保留顶部/底部空行时怎么安全清理中间空行

有些格式要求首尾留空行(比如 Python 模块开头结尾各一个空行),但中间连续空行要压缩成一个。这时不能无差别删,得用更精确的正则:ns*n 替换为 nn,再重复执行直到无变化。

这个表达式匹配「一个换行符 + 零或多个空白字符 + 一个换行符」,本质是找“空行间隙”。但它有个坑:在文件开头或结尾可能匹配失败,因为边界处没有前导/后续换行符;所以更适合处理中间段落。

  • 操作前建议先手动保留首尾各一行,再对中间区域 Ctrl+Shift+Pselect Lines 后批量处理
  • 别用 n{2,} 直接匹配多个换行——它不识别中间的空格/Tab,会把 n nn 当作两组,导致替换不干净
  • 如果要压缩成「最多一个空行」,替换目标写 nn 即可;想彻底去掉所有空行间隙,就替换成 n

命令行或批量处理时怎么绕过 Sublime GUI

如果要处理几十个文件,或者集成进脚本,别点来点去。Sublime 自带命令行工具 subl 不支持直接正则替换,得靠外部工具。推荐用 sedmacos/linux)或 findstr+PowerShell(Windows)。

例如 macOS 下批量删空行:sed '/^[[:space:]]*$/d' file.txt > clean.txt。注意 sed -i 直接修改有风险,务必先备份。

  • Windows PowerShell 更稳:(Get-Content file.txt) -notmatch '^s*$' | Set-Content clean.txt
  • 别信网上抄的 perl -i -pe 's/^s*$n//g' —— Perl 默认不按行读,容易崩,而且 -i 覆盖原文件极危险
  • 如果文件编码是 GBK 或 UTF-8 with bom,命令行工具可能乱码,优先用 Sublime 手动转成 UTF-8 再批处理

为什么有些空行死活删不掉?检查不可见字符

删完发现还有“空行”,光标一放上去却跳到下一行——大概率是 Unicode 控制字符,比如 u2028(LINE SEPARATOR)或 u2029(PARAGRAPH SEPARATOR)。Sublime 默认正则不认它们,s 也不覆盖。

打开 View → Characters → Show All Characters,就能看到 这种符号。这时候得显式匹配:^[su2028u2029]*$n

  • 正则里写 u2028 要求 Sublime 版本 ≥ 4123;老版本得用十六进制 x{2028}
  • 这类字符常见于从网页粘贴、ios 备忘录导出、或某些 Markdown 渲染器输出的内容里
  • 别依赖「删除所有空白」这种笼统操作——真正的空白是上下文决定的,不是视觉决定的

事情说清了就结束

text=ZqhQzanResources