Shell 如何在diff中仅获取添加/更改的行?

Shell 如何在diff中仅获取添加/更改的行?,shell,diff,Shell,Diff,a.txt 1 2 3 4 5 6 10 2 3 40 50 6 70 b.txt 1 2 3 4 5 6 10 2 3 40 50 6 70 我想在这些文件上运行一些命令,生成以下输出 10 40 50 70 如何在两个文件上运行差异,但只显示更改的行。我不希望输出周围有任何其他元数据 我也不想看到更改行周围的任何上下文。试试看 comm -1 -3 a.txt b.txt comm,common lines,是一个方便的命令。@Brian Tiffin的答案可能对某些人有用 如果

a.txt

1
2
3
4
5
6
10
2
3
40
50
6
70
b.txt

1
2
3
4
5
6
10
2
3
40
50
6
70
我想在这些文件上运行一些命令,生成以下输出

10
40
50
70
如何在两个文件上运行差异,但只显示更改的行。我不希望输出周围有任何其他元数据

我也不想看到更改行周围的任何上下文。

试试看

comm -1 -3 a.txt b.txt

comm,common lines,是一个方便的命令。

@Brian Tiffin的答案可能对某些人有用

如果你有问题的话,我可以让它工作

$ diff -U0 a.txt b.txt | grep ^+ | sed -e /s^+//

事实上,我很喜欢布赖恩用“comm”来回答。这对我来说是新的,对我来说很有效

我更复杂的方法是使用diff、grep和sed链删除前两个字符

diff a.txt  b.txt  | grep ">" | sed  s/..//

不是很漂亮,不是防弹的,但是很快就能破解。

你就不能编写一个实用程序来完成这项工作吗?也许我认为你的问题比实际问题要简单得多…@miliesmith我的问题非常简单,我确信已经有了一个unix命令来解决它。哈哈哈。好吧,说得好。你不是在寻找一个差异,你在寻找的是
b-a
,这是一个完全不同的东西。嗯,当我在我的实际文件中使用这个时,它仍然包含一些在每个文件中都相同的文件:我发布了一个可能适用于其他遇到与我相同问题的人的答案。我仍然将此标记为已接受,因为此答案应该有效。我的文件可能是不可靠的或者其他什么。是的,我的回答可能有点误导。COMM的第1列是文件1唯一的行,第2列是文件2唯一的行,第3列是两个文件的公共线。另一个攻击向量是“代码> sdiff-s .txt b.txt< /Cord>,并且查找小于或大于符号的条。