我有两个文件A1和A2(未排序).A1是A2的先前版本,并且已将一些行添加到A2.如何获取添加到A2的新行?
注意:我只想添加新行并且不想要在A1中但在A2中删除的行.当我这样做时diff A1 A2
,我会得到添加和删除但我只想添加.
请建议一种方法来做到这一点.
sco*_*sty 53
下面的所有内容都直接从@ TomOnTime的serverfault答案复制到这里:
显示仅存在于文件a中的行:(即从a中删除的内容)
comm -23 a b
Run Code Online (Sandbox Code Playgroud)
显示仅存在于文件b中的行:(即添加到b的内容)
comm -13 a b
Run Code Online (Sandbox Code Playgroud)
显示仅存在于一个文件或另一个文件中的行:(但不是两者)
comm -3 a b | sed 's/^\t//'
Run Code Online (Sandbox Code Playgroud)
(警告:如果文件的a
行以TAB开头,则它(第一个TAB)将从输出中删除.)
注意:两个文件都需要排序"comm"才能正常工作.如果它们尚未排序,您应该对它们进行排序:
sort <a >a.sorted
sort <b >b.sorted
comm -12 a.sorted b.sorted
Run Code Online (Sandbox Code Playgroud)
如果文件非常长,这可能是一个很大的负担,因为它需要额外的副本,因此需要两倍的磁盘空间.
编辑:请注意,可以使用进程替换更简洁地编写命令(感谢@phk注释):
comm -12 <(sort < a) <(sort < b)
Run Code Online (Sandbox Code Playgroud)
tim*_*rau 44
diff
然后grep
是你想要的编辑类型.
diff -u A1 A2 | grep -E "^\+"
Run Code Online (Sandbox Code Playgroud)
mer*_*erp 41
你可以试试这个
diff --changed-group-format='%>' --unchanged-group-format='' A1 A2
Run Code Online (Sandbox Code Playgroud)
你可以输入:
grep -v -f A1 A2
Run Code Online (Sandbox Code Playgroud)
与/sf/answers/1076955631/类似的方法,但希望更容易理解和易于调整:
diff \
--new-line-format="%L" \
--old-line-format="" \
--unchanged-line-format="" \
A1 A2
Run Code Online (Sandbox Code Playgroud)
简单的方法是使用
sdiff A1 A2
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用comm,正如你在linux中比较2个未排序的列表中所看到的,在第二个文件中列出unique
小智 5
git diff path/file.css | grep -E "^\+" | grep -v '+++ b/' | cut -c 2-
Run Code Online (Sandbox Code Playgroud)
grep -E "^\+"
是从以前接受的答案,它是不完整的,因为留下非源的东西grep -v '+++ b'
删除文件名为更高版本的非源代码行cut -c 2-
删除+
标志列,也可以使用sed 's/^\+//'
comm
或者sdiff
因为git而不是一个选项.
归档时间: |
|
查看次数: |
70440 次 |
最近记录: |