使用 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/^.//'
我有两个文件 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/^.//'