Sublime Text 去除重复行
2025年4月3日大约 2 分钟约 702 字
去除重复行
首先排序一下,点击下面的按钮。
Edit -> Sort Lines
此举是让重复行排序到一起去。
排序之后,使用正则表达式查询替换重复行
点击按钮 Find -> Replace Mac 快捷键 : option + command + F
#查找表达式 查找相邻重复行 忽略后面的空格
^(.*\S)\s*(\R\1\s*)+$
# 替换表达式 保留第一个捕获组的内容 并且在后面插入一个换行符
\1\n
然后替换所有重复行 就可以删除掉重复的数据保留一条记录了
正则表达式解析
行首锚点与核心内容捕获:^(.*\S)
^
- 锚定行首位置,确保匹配从行开头开始。
- 依赖多行模式(
m
修饰符)生效。
(.*\S)
.*
:匹配任意字符(除换行符)0次或多次,贪婪模式。\S
:强制最后一个字符为非空白符(如字母、数字)。- 逻辑:捕获整行内容,但忽略行尾的空白符(通过后续的
\s*
处理)。
示例:行"Hello␣␣"
(␣
为空格)会被捕获为"Hello"
。
行尾空白兼容:\s*
\s*
- 匹配行尾的0个或多个空白符(空格、制表符等)。
- 目的:允许重复行的行尾存在空白差异。
示例:"Apple "
和"Apple "
会被视为相同内容。
重复行检测:(\R\1\s*)+
\R
- 匹配任何类型的换行符(
\n
、\r\n
等),跨平台兼容。
- 匹配任何类型的换行符(
\1
- 反向引用第一个捕获组
(.*\S)
的内容,确保后续行与第一行核心内容完全一致。 - 严格性:若两行中间字符数量或顺序不同,则不匹配。
示例:"Py thon"
和"Python"
不匹配(中间空格差异)。
- 反向引用第一个捕获组
\s*
- 再次匹配行尾空白符,兼容每行尾部空白差异。
+
- 要求至少一个重复行(即总行数≥2)
行尾锚点:$
$
- 锚定整个匹配内容的结束位置,确保重复行是连续且完整的。
\1
的解析
- 正则表达式中的反向引用: 在正则引擎中,
\1
表示对第一个捕获组(即第一个括号()
包裹的内容)的引用,用于匹配与前面捕获组完全相同的文本。
示例:正则(a)\1
可匹配aa
(\1
代表第一个组捕获的a
)。
\n
的解析
- 通用换行符:
\n
是跨平台的换行符表示,对应 ASCII 码0x0A
。在文本处理中标记新行的开始。 - 正则中的字面匹配: 若正则表达式直接包含
\n
,则匹配文本中的实际换行符(需注意是否启用多行模式)。