C. *_*oss 85 command-line-interface diff
如何获得差异以仅显示添加和删除的行?如果 diff 不能做到,什么工具可以?
Tom*_*ime 104
另一种看待它的方式:
显示只存在于文件 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)
如果文件非常长,这可能是一个很大的负担,因为它需要额外的副本,因此需要两倍的磁盘空间。
mar*_*ton 16
comm可能会做你想做的。从它的手册页:
描述
逐行比较已排序的文件 FILE1 和 FILE2。
在没有选项的情况下,生成三列输出。第一列包含 FILE1 独有的行,第二列包含 FILE2 独有的行,第三列包含两个文件共有的行。
这些列是suppressable用-1,-2和-3分别。
例子:
[root@dev ~]# cat a
common
shared
unique
[root@dev ~]# cat b
common
individual
shared
[root@dev ~]# comm -3 a b
individual
unique
Run Code Online (Sandbox Code Playgroud)
如果您只想要独特的线条而不关心它们在哪个文件中:
[root@dev ~]# comm -3 a b | sed 's/^\t//'
individual
unique
Run Code Online (Sandbox Code Playgroud)
正如手册页所说,必须事先对文件进行排序。
小智 13
要显示没有上下文的添加和删除,行号,+,-,<,> !等等,你可以像这样使用差异:
diff --changed-group-format='%<%>' --unchanged-group-format='' a.txt b.txt
Run Code Online (Sandbox Code Playgroud)
例如,给定两个文件:
一个.txt
Common
Common
A-ONLY
Common
Run Code Online (Sandbox Code Playgroud)
b.txt
Common
B-ONLY
Common
Common
Run Code Online (Sandbox Code Playgroud)
以下命令将显示从 a 中删除或添加到 b 中的行:
diff --changed-group-format='%<%>' --unchanged-group-format='' a.txt b.txt
Run Code Online (Sandbox Code Playgroud)
输出:
B-ONLY
A-ONLY
Run Code Online (Sandbox Code Playgroud)
这个稍微不同的命令将显示从 a.txt 中删除的行:
diff --changed-group-format='%<' --unchanged-group-format='' a.txt b.txt
Run Code Online (Sandbox Code Playgroud)
输出:
A-ONLY
Run Code Online (Sandbox Code Playgroud)
最后,此命令将显示添加到 a.txt 的行
diff --changed-group-format='%>' --unchanged-group-format='' a.txt b.txt
Run Code Online (Sandbox Code Playgroud)
输出
B-ONLY
Run Code Online (Sandbox Code Playgroud)
这就是 diff 默认情况下所做的...也许您需要添加一些标志来忽略空格?
diff -b -B
Run Code Online (Sandbox Code Playgroud)
应忽略空白行和不同数量的空格。