我想让 (GNU)DIFF 仅打印出一个文件中不同的行。所以给出
==> diffa.txt <==
line1
line2 - in a only
line3
line4 changed
line5
==> diffb.txt <==
line1
line3
line4 changed in b
line5
line6 in b only
Run Code Online (Sandbox Code Playgroud)
我想diff --someoption diffa.txt diffb.txt
生产
line2 - in a only
line4 changed
Run Code Online (Sandbox Code Playgroud)
下面的内容看起来应该有帮助,但有点神秘:
--GTYPE-group-format=GFMT
Similar, but format GTYPE input groups with GFMT.
--line-format=LFMT
Similar, but format all input lines with LFMT.
--LTYPE-line-format=LFMT
Similar, but format LTYPE input lines with LFMT.
LTYPE is `old', `new', or `unchanged'.
GTYPE is LTYPE or `changed'.
GFMT may contain:
%< lines from FILE1
%> lines from FILE2
Run Code Online (Sandbox Code Playgroud)
vav*_*ava 50
不确定diff
一个人是否可以做到,但您始终可以使用其他 GNU 实用程序的强大功能来帮助您。
diff -u diffa.txt diffb.txt | grep '^-[^-]' | sed 's/^-//'
Run Code Online (Sandbox Code Playgroud)
它执行差异,然后仅选择以“-”开头的行 - 这些行已更改并具有来自 diffa.txt 文件的值,然后sed
只需删除那些“-”符号。
编辑:经过几次实验后diff
,看起来下面的命令会产生你想要的:
diff --changed-group-format='%<' --unchanged-group-format='' diffa.txt diffb.txt
Run Code Online (Sandbox Code Playgroud)
小智 14
更简单的方法是使用comm
linux 实用程序(它需要排序文件进行输入)。它写入标准输出:
diffa.txt 唯一的行
diffb.txt 唯一的行
常见的线路
并且您可以相应地通过参数 1,2 或 3 抑制它们中的每一个。所以在你的情况下,它看起来像这样:
comm -23 diffa.txt diffb.txt
它抑制对 diffb.txt 唯一的行、常见的行并打印出仅对 diffa.txt 唯一的行
来源:https : //www.tutorialspoint.com/unix_commands/comm.htm
我想提一下,comm
期望对输入文件进行排序,因此报告的结果与diff
.
diff --changed-group-format='%<' --unchanged-group-format='' diffa.txt diffb.txt
Run Code Online (Sandbox Code Playgroud)
是通用的。感谢@vava