文本工具 · 文本对比 / 替换

文本去重

行级/段级去重/保留首次或末次

✓本地处理 · 不上传 ✓免费 · 无需登录 ✓无次数限制 累计 116 次使用
输入或粘贴文本,去重结果实时刷新
去重设置 options
输入文本 input
就绪 · 等待输入
去重结果 result
原始 input0行/段
去重后 kept0保留
已删除 removed0重复
唯一项 unique0仅出现一次
就绪 · 纯本地处理,文本不上传、不入 URL
第一节

关于本工具

About

从几百行日志里找出真正重复的条目,靠肉眼扫一遍就错了。这个工具按行或按段落标记重复,并只保留首次或末次出现——不碰数据、不改顺序。纯浏览器运行,文本不会被上传,贴进去就能用。

使用场景

壹

论文查重后降重

硕士生小陈提交知网查重后,报告标红了大段文献综述——实际是引用同一篇综述的多个段落,被系统判定为重复。他需要把引用中重叠的句子删掉,只保留最核心的论据。用行级去重并选「保留末次」,把同一来源的 5 段引用压缩成 2 段,既保住关键引文,又让重复率从 32% 降到 15%,不必重写整章。

贰

销售话术库清洗

某 SaaS 公司销售总监要求全团队把各自积累的 3000 条「客户异议应答」汇总到飞书文档。结果发现 A 和 B 针对「价格太贵」写了几乎一模一样的 5 套话术,只是措辞略有不同。用段级去重并保留首次,把 3000 条压缩到 1100 条,去掉了 1900 条冗余内容,后续培训直接按精简版对练,每人省下 3 小时筛选时间。

叁

投标文件合并去重

建筑公司的投标专员把技术标、商务标、资信标三份文档拼成一份 500 页的标书,发现「公司简介」「项目业绩表」「资质证书清单」在三部分里各出现了一次,累计占了 40 页。用段级去重并选「保留首次」,把三处重复的公司简介合并成一处,标书从 500 页减到 460 页,打印装订成本省了 120 元,且评审专家不会因为重复内容产生负面印象。

肆

爬虫数据清洗入库

运营每天用爬虫抓取同行价格表,但同一个 SKU 在不同时间点被爬了多次,导致数据库里存了 5000 行重复记录,分析报表的「最低价」字段总是取到旧数据。用行级去重并选「保留末次」,只保留每个 SKU 的最新一条价格,数据库从 5000 行降到 1800 行,价格分析报表终于能反映真实市场行情,不再需要人工逐条核对。

伍

社群精华帖去重

某知识星球社群运营者整理过去 3 年的精华帖,发现「如何搭建个人知识体系」这个主题被 8 位成员写了 12 篇帖子,其中 6 篇的核心方法论(卡片笔记 + 主题阅读)完全一致。用段级去重并保留首次,把 12 篇压缩成 6 篇,去掉的 6 篇是重复的方法论描述,留下的 6 篇各自有独特案例。整理后的精华合集发布后,新成员阅读时间从 2 小时降到 40 分钟。

对比矩阵

维度本工具在线去重平台手工/Word 宏
处理方式浏览器本地运行,不上传文件需上传文本到对方服务器本地操作,但依赖 Office 软件
去重粒度支持行级/段级去重,可保留首次或末次通常仅行级去重,保留首次需手动编写 VBA 或逐行检查
速度毫秒级完成,无网络延迟受上传速度和服务器排队影响取决于数据量,万行以上明显变慢
最大处理量受浏览器内存限制,通常 10 万行以内流畅多数限制单次 1 万行或需付费扩容取决于电脑配置,百万行可能卡死
隐私数据全程在浏览器,关页面即销毁数据存留服务器,需阅读隐私政策文件存本地,但宏可能含恶意代码
离线可用完全离线,断网仍可使用必须联网需安装 Office,但可离线运行
收费免费,无隐藏限制基础免费,高级功能/去广告需付费需购买 Office 授权
第二节

使用指南

Getting Started

使用步骤

  1. 1在输入框中粘贴或键入待处理的文本内容,支持多行文本直接粘贴
  2. 2从「去重粒度」下拉菜单选择「按行去重」或「按段落去重」,段落以连续空行分隔
  3. 3在「保留策略」中选择「保留首次出现」或「保留末次出现」,决定重复内容的取舍方向
  4. 4点击「开始去重」按钮,结果区立即显示去重后的文本,重复行/段被移除
  5. 5点击结果区右下角的「复制」图标,去重后的文本即复制到剪贴板

输入输出示例

输入输出说明
苹果 香蕉 苹果 橙子 香蕉苹果 香蕉 橙子常规:行级去重保留首次出现,验证基础重复行消除
第一段内容。 第二段内容。 第一段内容。 第三段内容。第一段内容。 第二段内容。 第三段内容。常规:段级去重保留首次出现,验证段落边界识别
a b ca b c边界:无重复输入,验证工具不误删任何行
边界:空输入,验证工具不崩溃且返回空结果
行1 行1 行1 行1行1边界:全部相同行,验证只保留一条
苹果 香蕉 苹果 橙子 香蕉苹果 香蕉 橙子易错:用户可能误以为保留末次,实际默认保留首次
苹果 香蕉 苹果 橙子 香蕉橙子 香蕉 苹果易错:若选择保留末次,输出顺序会反转,用户需注意

常见错误对照

1.行级去重时,末尾空格导致重复行未被识别

✗ 错误第一行 "hello ",第二行 "hello"
✓ 修复两行均为 "hello"(无末尾空格)

文本去重默认按字符精确匹配,末尾空格被视为不同字符。常见于从 Excel 或网页复制文本时带入不可见空格。

2.段级去重时,空行被当作独立段落

✗ 错误段落间有空行,导致空行被保留为重复项
✓ 修复先删除所有空行,或确保段落间无多余空行

段级去重以连续换行分割段落,空行本身是一个空白段落。若文本中有多个空行,会被视为重复段落并保留。

3.保留首次 vs 末次混淆,导致顺序不符合预期

✗ 错误期望保留最后一次出现的重复行,却选了「保留首次」
✓ 修复确认需求:若保留最早出现选「首次」,保留最新出现选「末次」

「保留首次」保留第一次出现的副本,「保留末次」保留最后一次。日志去重常用末次(保留最新状态),数据清洗常用首次(保留原始记录)。

4.全角/半角符号导致重复未被识别

✗ 错误一行用英文逗号,另一行用中文逗号,内容相同
✓ 修复统一全角/半角后再去重

全角逗号(,)与半角逗号(,)的 Unicode 码点不同,去重视为不同字符。从不同来源(如微信 vs 网页)复制文本时常见此问题。

5.大小写差异导致重复未被识别

✗ 错误一行 "Hello",另一行 "hello"
✓ 修复先统一大小写(如全部转小写)再去重

文本去重默认区分大小写。若需忽略大小写,需先手动转换。常见于英文名称或代码注释中。

6.误将标点符号差异当作不同内容

✗ 错误一行 "你好。",另一行 "你好."(全角句号 vs 日文句号)
✓ 修复检查标点符号是否完全一致

全角句号(。)与日文句号(.)视觉相似但 Unicode 不同。去重时不会合并,需人工判断是否需要统一。

7.段级去重时,段落内换行导致分割错误

✗ 错误一个段落包含多个换行(如诗歌),被拆成多个段落
✓ 修复确认段落定义:若段落内不应有换行,先合并内部换行

段级去重以连续两个换行符(\n\n)分割。段落内部若有单个换行,会被视为不同段落。适用于纯文本段落,不适合代码或诗歌。

第三节

工作原理

How It Works

核心公式

去重结果 = 首次出现保留 + 后续相同行/段丢弃

变量说明

  • 首次出现保留每行/段第一次出现时保留
  • 后续相同行/段丢弃之后出现的完全相同行/段被移除

示例

输入文本共 5 行: 第1行:苹果 第2行:香蕉 第3行:苹果 第4行:橙子 第5行:香蕉 保留首次出现:第1行苹果保留,第2行香蕉保留,第3行苹果与第1行相同→丢弃,第4行橙子保留,第5行香蕉与第2行相同→丢弃。 去重结果(保留首次): 苹果 香蕉 橙子 共 3 行。

原始文本(多行/多段)拆分行/段按换行/空行分割逐项比对哈希表/字符串比较去重保留输出结果(去重后文本)保留策略首次出现 / 末次出现
用户输入 本地处理 输出结果
第四节

开发者集成

For Developers

6 种主流语言实现,复制即用:

# 行级去重:保留首次出现,忽略空行 lines = """apple banana apple cherry banana""".splitlines() seen = set() result = [] for line in lines: stripped = line.strip() if stripped and stripped not in seen: seen.add(stripped) result.append(line) print('\n'.join(result)) # 输出: # apple # banana # cherry
// 段级去重:保留末次出现(反转后去重再反转) const text = `段落A 段落B 段落A 段落C 段落B`; const lines = text.split('\n'); const seen = new Set(); const result = []; // 从后往前遍历,保留末次 for (let i = lines.length - 1; i >= 0; i--) { const line = lines[i].trim(); if (line && !seen.has(line)) { seen.add(line); result.unshift(lines[i]); // 插回原序 } } console.log(result.join('\n')); // 输出: // 段落A // 段落C // 段落B
package main import ( "fmt" "strings" ) func main() { input := "line1\nline2\nline1\nline3\nline2" lines := strings.Split(input, "\n") seen := make(map[string]bool) var result []string for _, line := range lines { trimmed := strings.TrimSpace(line) if trimmed != "" && !seen[trimmed] { seen[trimmed] = true result = append(result, line) } } fmt.Println(strings.Join(result, "\n")) // 输出: // line1 // line2 // line3 }
#!/usr/bin/env bash # 行级去重(保留首次),忽略空行 input="apple banana apple cherry banana" echo "$input" | awk '!seen[$0]++ && NF' # 输出: # apple # banana # cherry
use std::collections::HashSet; fn main() { let input = "line1\nline2\nline1\nline3\nline2"; let mut seen = HashSet::new(); let mut result = Vec::new(); for line in input.lines() { let trimmed = line.trim(); if !trimmed.is_empty() && seen.insert(trimmed.to_string()) { result.push(line); } } println!("{}", result.join("\n")); // 输出: // line1 // line2 // line3 }
<?php $input = "line1\nline2\nline1\nline3\nline2"; $lines = explode("\n", $input); $seen = []; $result = []; foreach ($lines as $line) { $trimmed = trim($line); if ($trimmed !== '' && !isset($seen[$trimmed])) { $seen[$trimmed] = true; $result[] = $line; } } echo implode("\n", $result); // 输出: // line1 // line2 // line3 ?>
第五节

常见问题

Q & A
问我有一段文字,只想删掉完全相同的行,但有些行只是开头几个字一样,会被删掉吗?+
答

不会。本工具的行级去重只比对整行内容是否完全一致,包括标点和空格。只要两行有任何字符不同(哪怕是多了一个空格),就不会被判定为重复行。如果你需要按开头或关键词去重,需要先自行拆分或预处理文本,本工具暂不支持模糊匹配。

问我有一段文章,想删除重复的段落,但保留第一次出现的还是最后一次出现的?+
答

工具提供了「保留首次出现」和「保留末次出现」两个选项。默认是保留首次,即保留该行在文本中第一次出现的位置,后续重复行全部删除。如果选择保留末次,则保留最后一次出现的那一行,之前的重复行会被删掉。适合处理日志或追加型数据,比如想保留最终状态而非初始记录。

问去重后行数没变,是不是工具坏了?+
答

大概率是文本本身没有重复行。工具只删除整行完全一致的重复项,如果每行内容都不同(比如每行都是唯一的 ID 或随机字符串),去重后行数自然不变。可以检查一下输入文本中是否确实存在完全相同的两行。另外注意,工具区分大小写和空格,ABC 和 abc 不算重复。

问这个工具支持去重后保留原顺序吗?+
答

支持。无论选择保留首次还是末次,输出结果都会按照原文本中该行首次(或末次)出现的先后顺序排列,不会打乱。例如输入“A、B、A、C”,保留首次则输出“A、B、C”;保留末次则输出“B、A、C”。不会出现随机排序或按字母排序的情况。

问我有一段代码或 JSON,想去重但怕破坏格式,这个工具会改我空行和缩进吗?+
答

不会。工具只根据整行内容来去重,不修改任何字符。空行(空字符串行)也会被视为一行内容,如果有多行空行,它们会被视为重复行而删除(只保留一行空行)。缩进(空格或 Tab)是行内容的一部分,两行缩进不同会被视为不同行。代码或 JSON 去重前建议先确认重复行是否真的需要删除。

问为什么我粘贴了 10 万行文字,点击去重后浏览器卡住了?+
答

本工具纯在浏览器本地运行(FE 实现),没有上传服务器,所有计算都在你的设备上完成。当文本行数极大(如超过 5 万行)时,浏览器的 JavaScript 处理能力可能成为瓶颈,导致页面短暂无响应。建议分批处理,单次不超过 3 万行;如果必须处理超大文本,可以考虑使用后端版本的工具或本地脚本。

问这个工具会把我文本上传到服务器吗?会不会泄露隐私?+
答

不会上传。本工具完全在浏览器本地运行(FE 实现),你粘贴的文本不会离开你的设备,也不会被发送到任何服务器。去重结果也是本地计算后直接显示在页面上。关闭页面或刷新后,输入和结果都会消失(除非你手动复制保存)。适合处理包含敏感信息(如密码、密钥、私人数据)的文本。

问我想把两个文件合并后去重,但不想手动复制粘贴,这个工具支持上传文件吗?+
答

本工具目前只支持直接粘贴文本,不支持上传文件。你可以先将两个文件的内容分别复制,然后粘贴到输入框中(可以一次性粘贴合并后的全部内容)。工具会自动识别换行符,按行处理。如果文件很大(超过几万行),建议用文本编辑器先合并,再分批粘贴处理。

问去重结果里多了空行或者少了一行,怎么回事?+
答

检查输入文本末尾是否有多余的空行。工具会将空行视为一行内容,如果输入末尾有多个空行,它们会被视为重复空行而删除,只保留一个。另外,如果文本中某行只有空格或 Tab,它和真正的空行(无字符)不是同一行,不会互相去重。建议去重前先清理输入中的多余空行和不可见字符。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

↑↓选择 ↵打开 ⌘+↵新窗口 esc关闭