You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何反转wdiff输出?以及如何从wdiff差异文件恢复原文件?

如何从wdiff输出恢复原始文件并反转差异?

没问题,我来一步步帮你解决这个问题——从wdiff生成的diff.txt里还原原始的old.txt、new.txt,以及反转wdiff差异输出的方法都很直观,咱们直接看具体操作:

一、恢复原始的old.txt

wdiff的标记规则很明确:[-内容-]代表仅在old.txt中存在、new.txt中被删除的内容,而没有标记的普通文本是两个文件共有的。所以要恢复old.txt,只需要:

  • 保留所有普通文本
  • 保留[-和-]之间的内容,同时去掉这两个标记符号
  • 完全移除{+内容+}这类new.txt独有的新增内容

用sed命令可以一键完成:

sed 's/\[-//g; s/-]//g; s/{+[^}]+}//g' diff.txt > old.txt

执行完后运行cat old.txt,就能得到原始内容:This is not what I want.

二、恢复原始的new.txt

同理,{+内容+}代表仅在new.txt中存在、old.txt中没有的新增内容。恢复new.txt的逻辑是:

  • 保留所有普通文本
  • 保留{+和+}之间的内容,去掉标记符号
  • 完全移除[-内容-]这类old.txt独有的内容

对应的sed命令:

sed 's/\[-[^-]+\-]//g; s/{+//g; s/+}//g' diff.txt > new.txt

验证一下,cat new.txt会输出:This is what I want!

三、反转wdiff的输出

反转wdiff输出的本质是交换差异的对比方向:把原来“old→new”的变化,转换成“new→old”的变化。具体来说就是:

  • 把原输出中[-内容-](old独有,new删除)转换成{+内容+}(从new到old是新增)
  • 把原输出中{+内容+}(new独有,old没有)转换成[-内容-](从new到old是删除)

用sed实现这个标记互换:

sed 's/\[-/{+/g; s/-]/+}/g; s/{+/\[-/g; s/+}/-]/g' diff.txt > reversed_diff.txt

执行后查看reversed_diff.txt,内容会变成:This is {+not+} what I [-want!-] {+want.+},这就是new.txt到old.txt的差异输出了。

内容的提问来源于stack exchange,提问作者Davide Fiocco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:36:33