如何获得在Linux中的两个文件之间的差异(只有补充)

我有两个文件A1和A2(未分类)。 A1是A2的前一个版本,有些行已经添加到A2。 我怎样才能得到添加到A2的新行?

注意:我只是想添加新行,不想要在A1中删除的行。 当我做diff A1 A2 ,我得到了添加以及删除,但我只想补充。

请build议一种方法来做到这一点。

diff ,然后grep为你想要的编辑类型。

 diff -u A1 A2 | grep -E "^\+" 

你可以试试这个

diff –changed-group-format ='%>'–unchanged-group-format =''A1 A2

以下所有内容直接从@ TomOnTime的serverfault answer 这里复制:

显示只存在于文件a中的行(即,从a中删除了什么)

 comm -23 ab 

显示只存在于文件b中的行:(即,什么被添加到b)

 comm -13 ab 

显示只存在于一个文件或另一个文件中的行(但不能同时存在)

 comm -3 ab | sed 's/^\t//' 

(警告:如果文件a有以TAB开头的行,它将从输出中删除(第一个TAB)。)

注:这两个文件需要排序为“通信”才能正常工作。 如果他们还没有排序,你应该排序他们:

 sort <a >a.sorted sort <b >b.sorted comm -12 a.sorted b.sorted 

如果文件非常长,这可能是一个相当的负担,因为它需要一个额外的副本,因此磁盘空间的两倍。

编辑:请注意,可以使用流程替换来更简洁地编写该命令(感谢@phk的注释):

 comm -12 <(sort < a) <(sort < b) 

你可以输入:

 grep -v -f A1 A2 
 git diff path/file.css | grep -E "^\+" | grep -v '+++ b/' | cut -c 2- 
  • grep -E "^\+"是来自之前接受的答案,它是不完整的,因为叶子非源材料
  • grep -v '+++ b'删除文件名为更新版本的非源代码行
  • cut -c 2-删除+号的列,也可以用sed 's/^\+//'

由于git, commsdiff不是一个选项。

简单的方法是使用

 sdiff A1 A2 

另一种方法是使用comm,就像在比较Linux中的2个未排序列表中所看到的那样,在第二个文件中列出了唯一的