如何从 diff 中获取唯一差异

Yeh*_*uda 6 linux diff sed

我有这段代码,如何改进它

diff  -b -i -w  out.txt out2.txt  
 | grep '^>' 
 | sed 's/^>//g' 
 | sed ':a;N;$!ba;s/\n/ /g' 
Run Code Online (Sandbox Code Playgroud)

示例数据(out.txt)

abc def ghk
abc def2 ghk
abc def ghk

123 333 555
566 3423 23
566 3423 3542
Run Code Online (Sandbox Code Playgroud)

示例数据(out2.txt)

abc def2 ghk
abc def ghk
abc def ghk

123 555 555
fsdjhfsda sd
566 3423 3542
Run Code Online (Sandbox Code Playgroud)

预期结果 :

abc def ghk  123 555 555  fsdjhfsda sd
Run Code Online (Sandbox Code Playgroud)

Rob*_*vis 6

这是一种简单的方法:

echo `diff -biw out.txt out2.txt | sed -n 's/^> //p'`
Run Code Online (Sandbox Code Playgroud)

如果你想单独使用 grep ——并且你可以利用 GNU grep 的格式化功能——你可以使用这个:

diff --unchanged-group-format= --changed-group-format=%\> \
  --new-line-format='%l ' -biw out.txt out2.txt
Run Code Online (Sandbox Code Playgroud)

这可能是最快的方法,并且当文件很大时它不需要很大的内存缓冲区。(您原来的 sed 解决方案和 echo 解决方案都会将行保留在内存中直到最后,但这会将它们吐出。)不过,该命令本身非常冗长。另请注意,它在输出末尾留下一个额外的空格。