文本对比工具 - 在线比较文本、配置和日志差异
在线按行对比两段文本、配置、日志或接口响应差异,适合排查版本变化、配置变更和调试输出差别。
功能特点
- 按行比较左右两段文本,突出新增、删除和变更内容
- 适合对比 JSON、YAML、SQL、日志和配置文件片段
- 帮助快速定位接口响应、环境配置或文档内容的差异
- 区分换行符、空格和 JSON 文本差异,不把文本相同直接等同于配置语义等价
- 浏览器本地完成对比,适合临时排查敏感调试文本
使用方法
- 保留原始编码、换行和末尾换行,将两个版本分别粘贴到左右两侧
- 查看逐行差异,先区分空白变化,再定位字段值、类型和结构变化
- 对 JSON/YAML 等配置继续用对应解析器验证,再复制差异结论用于评审和记录
示例输入
配置文件版本差异
旧版:timeout: 30 新版:timeout: 60 新版新增:retry: 2适合发布前检查环境变量、YAML、Docker Compose 或 Nginx 配置的实际变更。
空格与换行差异
左侧:{"name":"Alice"} 右侧:{ "name": "Alice" }适合判断差异来自空格、换行、缩进,还是字段值真的发生了变化。
JSON 响应差异
旧响应:{"status":"ok","items":[] } 新响应:{"status":"ok","items":[{"id":1}]}适合对比接口发布前后的字段、默认值和返回结构;结构化语义仍可继续用 JSON 工具验证。
日志版本对比
release-1:2026-07-21 10:00 200 /api/users release-2:2026-07-21 10:00 500 /api/users适合按时间窗口对比发布前后的错误模式,但不能替代日志聚合和指标查询。
换行符与空白差异
左侧:line one\nline two\n 右侧:line one\r\nline two\r\n适合识别 LF/CRLF、文件末尾换行和空行造成的差异,避免把格式变化误判为业务改动。
JSON 语义差异
左侧:{"enabled":true,"retries":3} 右侧:{"enabled":"true","retries":"3"}适合提醒布尔值/数字与字符串的类型变化;文本差异之后仍需让 JSON 解析器和应用配置校验确认影响。
示例输出
配置文件版本差异
- timeout: 30 + timeout: 60 + retry: 2空格与换行差异
仅空格不同;忽略空白时两侧 JSON 内容等价JSON 响应差异
- {"status":"ok","items":[] } + {"status":"ok","items":[{"id":1}]}日志版本对比
- release-1:2026-07-21 10:00 200 /api/users + release-2:2026-07-21 10:00 500 /api/users换行符与空白差异
差异:LF 与 CRLF、文件末尾换行和空行不同;业务文本未变化JSON 语义差异
差异:enabled 从布尔值 true 变为字符串 "true";retries 从数字 3 变为字符串 "3"
常见错误
- 纯文本对比会把 JSON 字段顺序、缩进和换行当作差异,不能直接等同于结构化数据变化。
- 两边文本的换行格式、文件末尾换行和 Tab/空格不同,可能造成整段看似变化。
- 文本对比只显示差异,不理解权限、类型或配置语义;应用变更前仍要交给对应解析器和审核流程。
- 日志没有先按时间、请求 ID 或版本筛选时,差异结果容易被无关日志淹没。
- 对比前后配置时如果混入密钥、Token 或用户数据,结果可能被复制到记录或分享链接中。
适用场景
- YAML / Docker 配置变更
- JSON 接口响应对比
- 发布前后日志分析
- 代码或文档版本审查
实操检查
核对变更、新增和相等行
固定输入:左侧 name: Toolbox city: Shanghai active: true,右侧 name: Toolbox city: Beijing active: true role: admin;步骤:分别粘贴两侧并点击“对比文本”;预期结果:统计包含 equal 2、changed 1、added 1、removed 0,city 为 changed,role 为 added;失败判断:相等行数量不对、role 被标成 removed,或 city 没有形成 changed 行。
核对 CRLF 归一和空输入
固定输入:左侧使用 a\r\nb,右侧使用 a\nb;步骤:点击“对比文本”,再清空两侧并再次点击;预期结果:第一步只有两行 equal、没有 changed/added/removed,第二步 rows 为空且四项统计为 0;失败判断:仅 CRLF 与 LF 的差异被报告,或空输入保留旧的 rows/统计。
页面专属核验
使用前与操作中
- 先明确这是逐行对比:实现只把 CRLF 归一为 LF,不做词级、字符级、JSON/YAML 语义或空白忽略比较;原文本和新文本的方向会影响 added/removed。
- 用包含相同行、修改行、新增行、删除行和重复行的样本检查 LCS 对齐;页面的 changed 是相邻 removed 与 added 合并后的行级结果。
- 比较配置、日志或接口响应前先确认换行、末尾空行和敏感字段是否应纳入差异;大文本还要关注 LCS 的内存和时间成本。
结果出来后
- 示例中的 city 从 Shanghai 改为 Beijing、末尾新增 role 后,统计是否为 equal 2、changed 1、added 1、removed 0,并保留正确行号?
- 左侧有 `alpha beta gamma`、右侧有 `alpha gamma` 时,beta 是否显示为左侧第 2 行 removed,而不是被标成 changed?
- 输入仅换行风格不同或末尾多一个换行时,结果是否符合 CRLF 归一和 `split('\n')` 的实际边界,而不是凭视觉认为两段完全相同?
相关工具
工具边界
- 文本对比按字符或行判断,不理解 JSON、YAML、日志字段或业务语义。
- 超大文件可能受浏览器内存和渲染性能影响。
- 差异结果不能替代代码审查、配置验证和日志监控。
与相似工具的区别
- 正则替换:文本对比只呈现两个版本的差异;正则替换会主动批量改写匹配内容,适合迁移但必须预览和回滚。
安全与兼容性
- 对比计算在浏览器本地完成,适合处理尚未脱敏的配置;导出或截图仍可能泄露秘密。
- 差异高亮不理解权限、编码或配置语义,应用生产变更前必须经过对应解析器和审核流程。
下一步排查
- 先统一换行、缩进和编码,再查看真正的内容差异。
- JSON/YAML 配置继续交给对应格式化和校验工具。
- 日志差异结合 HTTP 状态、时间戳、request ID 和 AI 日志分析确认根因。
常见问题
JSON 对比应该用文本对比还是 JSON Diff?
只关心原始文本排版时用文本对比;关心字段新增、删除和类型变化时,应使用 JSON 的结构化 Diff 功能。
为什么只改了换行却显示很多差异?
常见原因是 CRLF/LF、Tab/空格、文件末尾换行或整段缩进变化;先统一格式,再判断实际内容差异。
忽略空白后 JSON 一样就代表配置等价吗?
不代表。还要比较字段类型、默认值、数组顺序、重复键处理、环境变量替换和目标平台的配置语义;文本相同只说明输入字符一致。