使用 linux diff 进行比较时如何添加新的空行来代替已删除的行

How to add new empty line in place of deleted one when compering using linux diff

我有两个文件 a.txt 和 b.txt

a.txt内容

a
b
c

b.txt内容

a
c
d

我需要包含以下内容的文件 c.txt:

a

c
d

文件b.txt没有b行但是有额外的d行。 文件 c.txt 在缺少 b 的地方有空行,并且有新行 d。

我怎样才能做到这一点?

这里使用sed修改diff -u的输出:

$ diff -u a.txt b.txt
--- a.txt   2016-07-26 18:27:59.000000000 +0200
+++ b.txt   2016-07-26 18:28:05.000000000 +0200
@@ -1,3 +1,3 @@
 a
-b
 c
+d

我们想删除该输出的前三行,然后用空行替换以 - 开头的每一行。最后,我们需要从剩余的每一行中删除第一个字符:

$ diff -u a.txt b.txt | sed  -e '1,3d' -e 's/^-.*$//' -e 's/^.//'
a

c
d

如果 diff 在不同行之间发现太多相似行,这可能会失败,在这种情况下,它将打印一个新的 @@ 行。我们可以通过使用 -U:

请求更多行的统一上下文来解决这个问题
$ diff -u -U 100 a.txt b.txt | sed  -e '1,3d' -e 's/^-.*$//' -e 's/^.//'