如何从 diff 创建 sed 命令行?

如何从 diff 创建 sed 命令行?

我知道diff -e可以输出ed脚本。我的理解是,edsed分享他们的方法,但这ed是交互式的,并且sed适用于流。

我想要做的是获取 的输出diff -e(或其他 的调用diff)并将其合并到 的调用中,sed这样使用原始“之前”文件作为输入调用该命令会产生与diff调用的“之后”文件等同的输出。我想将命令格式化为-e <BLERG>传递给 的选项集合,sed以避免必须将 ed/sed 脚本写入另一个文件。

我尝试了很多明显的混合方法,但没有得到想要的(甚至看起来不合理的)输出,我想我漏掉了一些总体的东西。这可能吗?

答案1

您可以坚持使用 ed:假设您想要比较 file1 和 file2,然后将更改应用于 file1 并写入名为 file1.b 的文件:

{ diff -e file1 file2; echo "w file1.b"; echo q; } | ed file1

现在,file2 和 file1.b 之间应该没有区别了:

$ diff file2 file1.b && echo "no diff"
no diff

答案2

diff和随后对差异的应用在diff不同的时间。因此,假设您有 的输出diff,我将使用patch

diff -u 原始.html 新.html > 原始.补丁

然后在接收端:

curl -s http://someurl.com > original.html; patch < original.patch

这确实意味着将您的文件名设计得相同,因为它们包含在补丁文件中。

相关内容