我有两个文件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, comm
或sdiff
不是一个选项。
简单的方法是使用
sdiff A1 A2
另一种方法是使用comm,就像在比较Linux中的2个未排序列表中所看到的那样,在第二个文件中列出了唯一的