清单去重排序反转怎么用?几百行文本整理的避坑指南

2026-10-15约 8 分钟文本处理涉及 3 个工具

面对几百上千行的清单,去重、排序、反转是最常用的三个整理动作,但每个动作都有默认行为里没写出来的细节。这篇按「先分清动作、再确认默认行为、最后避坑」的顺序讲一遍。

核心要点
  • 文本去重默认按整行完全一致判断重复,行首或行尾多一个空格就会被当成两行
  • 文本排序的升序是字典序,按字符逐个比较,所以 10 一定排在 9 前面
  • 中文没有大小写,升序结果等价于按字符编码值排列,与拼音顺序无关
  • 文本反转有字符、行、行内、单词四种模式,只有行反转之后每行内部的内容还是原样
  • 整理前先确认换行符是否统一,单独的回车符在部分编辑器里也被算作换行,行数会对不上

#三个动作各管一件事

去重是删掉重复的行,排序是按行内容重新排列,反转是按原有位置颠倒过来 —— 三者不能互相替代,选错工具只会把数据搅得更乱。 它们的判断依据完全不同:

动作改变什么依据工具
去重删掉重复行行内容是否完全相同文本去重
排序重排行行内字符或数字的大小文本排序
反转颠倒行的位置原本的先后位置文本反转

最常见的误用是拿反转去做倒序:想让日志最新的排在最前面,正确做法是用文本排序的降序,或者直接按时间列排;用字符反转会把每一行的内容也一起倒过来,得到一堆读不了的乱码。

技巧

整理前先用 文本统计 记下原始行数与字符数,整理完再统计一次。数字对得上,才能确认这轮操作只动了你想动的东西。

#去重:三个默认行为要先确认

文本去重默认按「整行完全一致」判断重复,大小写、行首行尾的空格、看不见的特殊字符都参与比较,所以 Apple 和 apple 在默认设置下是两行而不是一行。

它提供三个开关,分别对应三类不同的重复:

选项打开后的效果什么时候该开
忽略大小写Apple 与 apple 视为同一行邮箱、域名、英文标签
去空白行空行不进入结果从网页或 PDF 粘贴后的清理
显示计数标出每行出现次数需要找出高频项时

结果保留每行首次出现的位置和写法,状态栏会告诉你去掉了多少行。

下面这三行看起来一样,实际是三行:第一行与第三行的行尾不同,第二行的大小写不同。

Apple
apple
Apple 

正确的做法是先把大小写和空格统一,再去重:

apple
apple
注意

首尾空格不会自动去掉。从 Excel 单元格、PDF 或聊天记录里复制出来的一列,行尾常带空格或制表符,去重前用 查找替换 或 正则表达式测试 清理一次,去重结果才对得上预期。

#排序:升序排的是字符,不是数值

文本排序的默认升序是字典序 —— 逐字符比较,先比第一个字符,相同再比第二个。因为字符 1 的编码小于 9,所以 10 会排在 9 前面。

这不是 bug,是字典序的定义。对比一下同一组文件名在两种模式下的结果:

字典序(默认升序)
file1.txt
file10.txt
file2.txt
file9.txt
自然排序(数字感知)
file1.txt
file2.txt
file9.txt
file10.txt

只要行里含有数字编号,就应该选自然排序。 版本号、章节目录、订单号、IP 列表都属于这一类。

说明

判断当前是不是按数值排序,最快的办法是拿 9、10、100 三行试一次:10 排在 9 前面就是字典序,9 排在 10 前面就是自然排序。

#中文排序按编码值,不按拼音

中文字符没有大小写,升序时按字符的编码值比较,等价于 Unicode 码位顺序,所以结果看起来和拼音没有关系。 例如「阿」的码位小于「北」,即使拼音上 a 也小于 b,两者恰好一致,但换一组字就会分叉。

需要拼音顺序时,工具本身不会替你注音,可行的做法是给每行先加上一段拼音前缀(拼音列用 查找替换 拼进去),排完再把前缀去掉。反过来说,编码值排序是稳定且可复现的:同一份数据在任何机器上排出来的顺序都一样。

#大小写混排时的顺序

勾选忽略大小写之后,Apple、apple、APPLE 会被视为同一个键,先后顺序取决于它们各自在原文里的位置,而不是重新按大小写规则排。需要严格的大小写分组时,不要勾这一项。

#反转:先确认你要倒的是什么

文本反转提供字符反转、行反转、行内反转、单词反转四种模式,只有行反转会保持每一行内部的内容原样不变。

模式效果典型用途
字符反转整段文字按字符从尾到头倒序生成镜像文本、做简单混淆
行反转颠倒所有行的先后顺序日志倒着看,最新一行排最前
行内反转每行内部字符倒序,行的顺序不变分行处理的特殊场景
单词反转单词顺序颠倒,单词本身不拆英文句子级别的倒序

同一个输入在两种模式下的结果差别很大:

输入:    第 1 行 / 第 2 行 / 第 3 行
行反转:  第 3 行 / 第 2 行 / 第 1 行
字符反转:行 3 第 / 行 2 第 / 行 1 第

中文字符与 emoji 会被当成完整字符处理。 这一点比看起来重要:用按 16 位单元倒序的简单算法处理 emoji 或部分生僻字时,会把一个字符拆成两半,输出成方块或乱码,而这个工具不会。

#什么时候该用哪个工具

你想做的事用哪个说明
删掉重复的邮箱、订单号文本去重需要时勾选忽略大小写
让文件名按数字顺序排列文本排序选自然排序模式
把日志按时间倒过来看文本反转用行反转,不要用字符反转
先看有多少行、多少字文本统计行数、字数、字符数分别给出
去掉行首行尾的空格查找替换精确字符串替换
批量处理不规则的空格正则表达式测试用正则匹配更灵活
把全角数字转成半角全角半角转换从 PDF 复制的文本常见

#常见问题

#去重之后原来的顺序会变吗?

不会。文本去重保留每行首次出现的位置和原始写法,输出顺序与输入顺序一致,只是删掉了后面重复的行。如果你希望结果按字母或数字排序,需要再去重之后单独用文本排序处理一次。

#排序后中文的顺序看起来是乱的,是坏了吗?

不是坏了,是编码值顺序与拼音顺序不一致。中文字没有大小写,升序按字符的编码值比较,所以「中」「国」「人」的先后取决于它们的码位,与读音无关。要按拼音排,需要先给每行补上拼音前缀,排完再去掉。

#反转之后中文或 emoji 变成了方块,是什么原因?

那是字符被拆开了。emoji 和部分生僻汉字在内部占两个 16 位单元,按单元倒序会把一个字符切成两半,显示成方块。文本反转做了中文与 emoji 的安全处理,按完整字符倒序;如果换成自己写脚本处理,需要按码位而不是按 16 位单元遍历。

#从 Excel 复制出来的一列,行首有多余空格,怎么先清掉?

用查找替换把开头的空格批量删掉,规则不固定时改用正则匹配行首的空白字符。清理完再用文本统计核对行数,确认没有整行被误删,最后才去去重 —— 顺序反了会把本该合并的行留成两行。

#几百上千行的数据,处理时会卡吗?会上传吗?

不会上传。三个工具都在浏览器本地完成,内容不经过服务器,可以放心处理手机号、邮箱这类清单。几千行的量级在这些操作上是瞬时完成的,只有在结果区域需要一次性渲染上万行时才会感觉到延迟。

#换行符不统一会导致什么问题?

换行符混用时行数可能对不上。Windows 文本用 CRLF、Linux 用 LF,而单独的一个回车符在部分编辑器里也被算作换行,于是同一份文件在不同工具里读出的行数不同,去重也会因为行尾多出的不可见字符而漏掉重复项。整理前统一换行符,或用文本统计先确认行数。

本文提到的工具

相关文章