[英]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
在不同行之间发现太多相似行,则可能会失败,在这种情况下,它将打印新的@@
-line。 我们可以通过使用-U
请求更多行统一上下文来解决此问题:
$ diff -u -U 100 a.txt b.txt | sed -e '1,3d' -e 's/^-.*$//' -e 's/^.//'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.