0
Words
0
Characters
0
No spaces
0
Lines
0
Paragraphs
0
Sentences
0 min
Reading time
Lines with duplicates
Deduped output

删除重复行:在线文本去重

粘贴任意列表,删除精确重复的行,保留原始顺序或对结果排序。内置大小写和空格控制选项。

这个工具的用途

一个免费的浏览器内工具,用于从单段文本中删除重复行。粘贴输入内容,选择是保留原始顺序还是对输出排序,重复行即被移除。内容不离开您的设备。

这是命令行 sort -u 的图形化等价工具,或者当您想保留第一次出现的行并维持原始顺序时,相当于 awk '!seen[$0]++'。如果您曾经将 4000 行的邮件导出内容粘贴到终端只是为了运行 sort | uniq,那么本工具可以在不打开终端的情况下完成同样的事。

去重是精确的、基于行的。两行必须逐字符匹配(取决于大小写和修剪开关的设置)才会被视为重复。模糊匹配、近似重复检测和相似度评分有意不在本工具的范围内——那是另一个工具解决的问题。

去重的实际工作原理

内部工具逐行遍历,将已见过的值存储在基于哈希的集合中,与 JavaScript 的 Set 或 Python 的 set 使用的数据结构相同。平均查找时间是 O(1),因此一百万行在普通笔记本上不到一秒即可完成。底层算法是普通的哈希表成员检查。

两种模式:保留顺序保留每行的第一次出现,丢弃后续重复项,行为与 awk '!seen[$0]++' 一致。排序并去重先按字母顺序对全部输入排序,然后输出每个唯一行一次,行为与 sort -u 一致。根据下游消费者的期望选择对应模式。

比较本身也有开关。不区分大小写[email protected][email protected] 视为同一行。修剪空格在比较前删除行首和行尾的空格和制表符,因此 " example""example ""example" 会归并为一条记录。两者默认关闭,因为安全的行为是精确匹配您写入的内容。

三步删除重复行

一个输入面板,一个输出面板。不上传任何内容。

  1. 1

    粘贴您的行内容

    将文本粘贴到输入面板中。任意列表均可:邮件地址、IP 地址、URL、SKU、日志时间戳、包名——任何每行一条的内容。如果您想先看看结果,点击示例会加载一个包含有意设置的重复项的示例。

  2. 2

    选择选项

    选择保留顺序(保留第一次出现,类似 awk '!seen[$0]++')或排序并去重(按字母顺序,类似 sort -u)。如果 Alicealice 应该合并,勾选不区分大小写;如果应忽略行首/行尾空格,勾选修剪空格

  3. 3

    复制或下载结果

    右侧面板显示去重后的输出以及删除了多少行的统计。点击复制将其提取,或点击下载将其保存为 .txt 文件。两个面板可独立滚动,便于查看哪些行消失了。

适合使用本工具的场景

导入前清理营销邮件列表

从一个 CRM 导出列表,再注入来自网络研讨会注册的列表,将两者粘贴进来,打开不区分大小写修剪空格进行去重。Mailchimp 和 HubSpot 在导入时无论如何都会拒绝重复地址,但它们会拒绝整个批次而非只拒绝重复项,所以提前清理可以避免重新上传。

对审计日志中的 IP 地址去重

awk 从一周的 auth.log 中提取源 IP,粘贴进来,在保留顺序模式下去重。您会得到一份干净的唯一攻击者列表,同时保留"谁最先出现"这一粗略的时间序列信号。然后将其导入防火墙的封锁列表。

清理从多页抓取的 URL 列表

抓取站点地图和分页索引会多次返回相同的 URL。将合并后的列表导入,排序并去重,即可得到规范的抓取范围。末尾斜杠和查询字符串仍计为不同的行,如果需要合并,请先规范化。

精简 pip freeze 或 npm ls 的输出为唯一包

对两个虚拟环境运行 pip freeze,或对 monorepo 运行 npm ls --all,会将同一个包打印多行。合并、粘贴、去重,即可得到每个 name==version 一行的概览,快速了解实际安装了什么。

从多个来源粘贴的 CSV 行

适用于行级去重,通常就是您处理每行是独立记录时的需求。注意:这是纯文本去重,不感知列结构。如果需要真正的行级去重,能处理带引号的逗号并忽略列顺序,请使用专门的 CSV 工具。对于大多数从电子表格粘贴过来的情况,行级去重已经足够。

清理复制来的参考文献或引用列表

从三个浏览器标签页复制引用信息到一个文档,会导致同一个 DOI 重复四次。粘贴进来,打开修剪空格(因为从 PDF 复制粘贴很容易带入多余的空格),去重,即可得到干净的参考文献列表。排序模式在这里很方便,可以生成按字母顺序排列的参考文献。

去重快速参考

文本去重时最常出现问题的边缘情况。在信任输出之前值得快速浏览一遍。

TopicWhat this tool does
顺序保留保留顺序模式保留第一次出现,丢弃后续重复项。类似 awk '!seen[$0]++' 或 Python list(dict.fromkeys(lines))。排序模式按字母顺序排列,类似 sort -u
大小写敏感性默认区分大小写。Alicealice 是不同的行,除非打开不区分大小写。邮件和用户名列表通常需要打开;SKU 列表通常不需要。
空格修剪默认关闭。" example""example ""example" 是三个不同的行,除非打开修剪空格。行内部的空格永远不做处理。
空行被视为普通行值(空字符串)。启用去重后,如果输入中有空行,输出中会保留一个空行。如果要删除所有空行,请单独进行空白字符清理步骤。
换行符(CRLF vs LF)如果末尾的 \r 在分割后仍然存在,以 \r\n 结尾的行在技术上与以 \n 结尾的行不同。我们按 \r?\n 分割,因此混合换行符会被规范化。如果您看到幽灵重复,说明输入中有独立的 \r 字符混在行中。
Unicode 规范化两个视觉上相同的字符串,如果一个使用 NFC 另一个使用 NFD(预组合 vs 分解重音符号),比较结果可能不同。本工具不做规范化处理。如果怀疑存在这种情况,请先用 String.prototype.normalize('NFC') 或 Python 的 unicodedata.normalize 将两个输入都规范化为 NFC。
输入末尾的换行符\n 结尾的文件有一个幻影空行。大多数编辑器会隐藏这个情况。我们将其视为一个空行,与其他空行一起去重。输出按照惯例保留一个末尾换行符。
编码全程使用 UTF-8。浏览器在粘贴时处理解码;如果您的字节最初是 Latin-1 或 Windows-1252,ASCII 范围外的字符在去重运行之前可能已经出错。请在上游转换编码。

删除重复行:常见问题

它保留原始顺序还是对输出排序?

两者均支持,您来选择。保留顺序保留每行的第一次出现,丢弃后续重复项,因此输出与输入的顺序大致相同。排序并去重将整个结果按字母顺序排序。当顺序有意义时(时间序列日志、排名列表)选择保留顺序;当您只需要一个干净的唯一集合时选择排序。

比较区分大小写吗?

默认区分,因为这是安全的假设。除非您打开不区分大小写,否则 Alicealice 是不同的行。大多数邮件系统对本地部分不区分大小写,因此邮件列表几乎总是需要打开这个开关。用户名也是如此(在不区分大小写的平台上)。对于真正区分大小写的 SKU 和标识符,保持关闭。

可以忽略行首和行尾的空格吗?

可以,通过修剪空格实现。它在比较前删除行首和行尾的空格和制表符,因此 " example ""example ""example" 会归并为一条记录。当输入是手动编辑或从 PDF 复制时很有用,两者都容易带入多余的空格。行内部的空格不做处理。

这与 Unix 命令 uniq 有什么不同?

uniq 命令只合并相邻的重复行,这是一个常见的陷阱。被另一行隔开的两个相同行两者都能通过 uniq。这就是为什么 Unix 中通常用 sort | uniqsort -u:需要先排序让重复行相邻。本工具不需要排序后的输入,因为它在遍历时用哈希集合追踪每一个已见过的行。

它能统计每行重复了多少次吗?

不能,那是另一个功能。如果您需要计数,Unix 命令 uniq -c 可以在排序后使用:sort input.txt | uniq -c | sort -rn 会生成按出现次数降序排列的频率表,当您需要找出最频繁的条目时很有用。本工具专注于清理,而非分析。

可以粘贴多大的输入?

几百万行没有问题。去重本身是 O(n) 加上常数时间的哈希查找,因此瓶颈是浏览器渲染结果面板,而不是去重算法。对于非常大的输入(50 MB 以上),当文本框重绘时会有明显的停顿。如果您的数据规模已经到了这个级别,您手边几乎肯定已经有了 sort -u,建议直接使用它。

这个工具免费吗?需要注册吗?

免费,无需账户,没有任何附加条件。没有注册门槛,没有每日粘贴量限制,没有将实用选项锁在登录后的付费层级。一切都是在您浏览器中运行的纯 JavaScript,因此页面加载后即使断网仍可使用。粘贴列表,去重,复制结果,关闭标签页。

这与 Excel 中的"删除重复项"或 sort -u 命令有什么不同?

无需打开电子表格,无需使用终端:粘贴到一个输入框,点击即可。Excel 需要将数据加载到列中并打开对话框;sort -u 需要 shell 环境。还有一个真正的行为差异:uniq 只删除相邻的重复行,因此您必须先 sort,这会破坏原始顺序。本工具可以在文本中任意位置捕获重复项,并且能保留原始顺序。而且您粘贴的任何内容都不会被上传。

我的文本是私密的吗?会上传任何内容吗?

不会上传任何内容。去重完全在您的浏览器中对 JavaScript Set 运行,您的列表从不经过任何服务器,不被记录,也不被存储。您可以粘贴内部邮件导出、客户列表或泄露密码检查清单,内容不会离开您的设备。要验证,请打开浏览器 DevTools,切换到 Network 标签,进行去重操作并观察,没有任何出站请求被触发。

离线可用吗?可以在手机上使用吗?

两者都可以。页面加载后,去重是本地 JavaScript,因此可以关闭 WiFi 或进入隧道区域,它仍然可以正常工作。在手机上,布局会将输入和输出垂直堆叠,您可以将邮件或备忘录应用中的列表粘贴进来,去重后复制结果。无需安装,无需下载应用,就是一个网页。

这与 Notepad++ 或 Sublime Text 等文本编辑器有什么不同?

许多编辑器可以删除重复行,但功能比较隐蔽。Notepad++ 需要 TextFX 插件,或者只能删除相邻重复行的排序方式;Sublime 将其藏在 Permute Lines 然后 Unique 下面。这里正是这个页面的全部意义所在:粘贴、点击、复制,无需安装插件,不上传任何内容。缺点是编辑器会保持文件打开以便继续编辑,所以对于一次性快速处理用这个更快,但真正编辑时还是会回到编辑器中。

隐私保护与工作原理

您的文本不会离开浏览器。去重、比较和渲染完全在本地运行。我们不分析您的输入,不记录,也不进行任何服务器往返。想要背景资料,维基百科有关于哈希表的详细介绍。