2016-07-26 90 views
0

compering时,如何到位删除一个的添加新的空行,我有两个文件a.txt中和b.txt使用Linux差异

A.TXT内容

a 
b 
c 

湾TXT内容

a 
c 
d 

我需要提交c.txt有以下内容:

a 

c 
d 

文件b.txt没有b行,但有多余的d行。 文件c.txt有空行来代替丢失的b并且有新的行d。

我该如何存档?

回答

1

下面是使用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/^.//'