您的位置:首页 >Sublime Text如何删除重复行_Sublime删除重复行技巧
发布于2026-04-28 阅读(0)
扫一扫,手机访问

这里先说一个核心判断:Sublime Text 自带的 Remove Duplicate Lines 命令,并不能实现真正的全局去重。它只删相邻的重复行;要想彻底清理所有重复项,必须先排序,或者干脆换用正则表达式乃至插件。
Remove Duplicate Lines 总是漏删?这个命令的底层逻辑其实很简单:它只会逐行比对,并且只删除和**上一行内容完全相同**的那一行。这就意味着,只要两行内容是重复的,但中间被其他内容隔开了,它就完全识别不出来。
apple → banana → apple,第二个 apple 是不会被删除的。\r\n 对比 \n),都会导致它判定为“不同行”,哪怕肉眼看起来一模一样。hello (末尾带空格)和 hello 会被视为两行不同的内容。如果不打算安装插件,那么“排序后正则替换”是兼容性最好、无论文件大小都相对稳妥的方法。关键在于正则表达式的写法和执行节奏:
Ctrl+A 或 Cmd+A)。Ctrl+Shift+P),输入 Sort Lines 并回车,让所有行按字母顺序排列。Ctrl+H),务必勾选 Regular Expression(也就是点击那个 .* 图标)。^(.*$)\n^\1$,替换框留空。Replace All。如果提示“0 occurrences found”,说明重复项已清理完毕;否则,可以再点击一次,确保万无一失。需要留意的是,正则中的 \n 在Windows格式的文件里可能无法匹配 \r\n。保险起见,可以尝试使用 ^((?s:.*))$\s+^$,不过在大多数情况下,原来的表达式就够用了。
Sort Lines,改用插件或 Python 控制台内置功能无法在去重的同时保留行序,强行排序会打乱原有的数据逻辑,比如日志的时间线或者代码的执行顺序。这时候,有两条更实用的路径:
Find Duplicate Lines 这类插件。安装后,全选文本,打开命令面板输入 Remove All Duplicates,它会自动保留首次出现的行,并删除后续的重复项。Ctrl+`),粘贴并运行以下脚本:
import sublime, sublime_plugin
view = sublime.active_window().active_view()
regions = view.sel()
if not regions:
regions = [sublime.Region(0, view.size())]
for region in regions:
lines = view.substr(region).splitlines(keepends=True)
seen = set()
unique_lines = []
for line in lines:
if line not in seen:
seen.add(line)
unique_lines.append(line)
view.replace(sublime.Edit(), region, ''.join(unique_lines))
这段代码会严格按行字符串进行全局判重,不碰空格、不排序、也不会丢失换行符。当面对海量文本或需要更复杂的去重条件时,Sublime Text 内置的正则引擎可能会卡顿甚至无响应。而且,它原生不支持“按指定列去重”、“忽略大小写”或“跳过空行”等常见需求。
sort -u input.txt > output.txtGet-Content input.txt | Sort-Object -Unique | Set-Content output.txtpython3 -c "import sys; seen=set(); [print(l, end='') for l in sys.stdin if l not in seen and not seen.add(l)]" 最后必须警惕的是:Sublime Text 的任何去重操作都不会自动备份。在处理前,务必通过 File → Sa ve As… 另存一个副本。尤其是使用正则表达式反复点击 Replace All 时,一旦操作失误,很难回退到之前的状态。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9