跳转到主内容
极星编程网:以代码为星,赴技术山海!

Sublime怎么去除重复行_Sublime如何删除文本中重复内容【详解】

Sublime Text 内置 Sort Lines (Unique) 仅能去重相邻重复行,非相邻重复需用正则匹配或外部工具如 awk、Python 处理,且需注意换行符统一和空白字符处理。 Sublime Text 去重用
Sort Lines
会误删非重复行 直接选中全文后点
Edit → Sort Lines
,看起来去重了,其实只是把行按字母序排好,相同内容的行被挤到一起,但没删——你得手动再删重复。这不是去重,是排序。 真正去重必须配合「唯一性过滤」操作: 全选文本(
Ctrl+A
或
Cmd+A
) 打开命令面板(
Ctrl+Shift+P
/
Cmd+Shift+P
) 输入
Sort Lines
,选中
Sort Lines (Unique)
—— 注意括号里带
Unique
的那个 这个命令本质是先排序、再合并相邻重复行,所以要求重复行必须挨着。如果原始文本里重复行分散在不同位置,它就无效。 重复行不相邻时,得用正则 +
Find All
手动清理 比如日志里同一错误反复出现,但中间夹着时间戳或随机 ID,
Sort Lines (Unique)
就完全失效。 这时候得靠正则匹配「整行内容」并标记所有重复项(保留第一个): 打开查找(
Ctrl+F
/
Cmd+F
),勾选
Regular Expression
和
Whole Line
输入正则:
^(.*)(\n\1)+$
—— 匹配连续出现的完全相同的行 但这个只能处理紧邻重复;更通用的是先用
^([^\r\n]+)\r?\n(?=.*^\1$)
查找所有「后面还有相同行」的行(需开启
Dot matches newline
) 点击
Find All
,然后
Ctrl+Shift+L
把所有匹配转为多光标,再按
Delete
删掉——注意别删第一处 风险点:正则里
^
和
$
在 Sublime 中默认按 \n 分界,但 Windows 换行符是
\r\n
,若文件混用换行符,
^
可能错位,建议先统一用
File → Line Endings → Unix
。 插件
Remove Duplicate Lines
看似方便,实则不可靠 很多人搜教程装了同名插件,结果发现它只删「完全相同的连续行」,和内置
Sort Lines (Unique)
能力差不多,甚至更弱——不排序、不保证顺序、不支持跨段落去重。 仿Sublime和notepad++编辑器效果 仿Sublime和notepad++编辑器效果 下载 而且该插件已多年未更新,Sublime Text 4 下部分功能失效,比如对大文件(>50MB)会卡死或静默失败。 如果你真需要稳定去重,推荐用外部工具:保存文件后,在终端运行
awk '!seen[$0]++' file.txt > dedup.txt
或者用 Python 一行:
python3 -c "print(''.join(dict.fromkeys(open('file.txt'))))" > dedup.txt
Sublime 内置的
Filter Lines
命令(需安装 Package Control 后搜索安装)比插件更轻量,支持正则过滤,但同样不解决「非相邻重复」问题 去重后顺序乱了?那是你没关掉
Sort
步骤
Sort Lines (Unique)
本质是「排序 + 去重」,原始顺序必然丢失。如果业务要求保留首次出现顺序(比如配置项、URL 列表),就不能用它。 此时唯一办法是导出后用脚本处理,例如 Python:
with open('input.txt') as f: seen = set() for line in f: line = line.rstrip('\n\r') if line not in seen: print(line) seen.add(line)
注意
line.rstrip()
很关键——否则
'abc'
和
'abc '
(带空格)会被视为不同行;而 Sublime 自带功能完全不处理首尾空白,容易漏掉逻辑重复。 真正的难点从来不在「怎么点菜单」,而在你是否清楚:重复的定义是什么?是整行字符一致,还是语义等价?后者 Sublime 做不了,得换工具。

相关文章