差异从第二个文件中获取更改的行

Diff to get changed line from second file

我有两个文件 file1 和 file2。我想使用 diff.
打印添加到 file2 的新行 文件 1

/root/a
/root/b
/root/c
/root/d

file2

/root/new
/root/new_new
/root/a
/root/b
/root/c
/root/d

预期输出

/root/new
/root/new_new

我查看了手册页,但没有关于此的任何信息

关注 awk 可能会对您有所帮助。这将告诉您所有那些出现在 Input_file2 而不是 Input_file1.

中的行
awk 'FNR==NR{a[[=10=]];next} !([=10=] in a)'  Input_file1  Input_file2

如果您不需要保留顺序,您可以使用 comm 命令,例如:

comm -13 <(sort file1) <(sort file2)

comm 比较 2 个排序的文件并打印 3 列输出。首先是 file1 独有的行,然后是 file2 独有的行,然后是两者共有的行。您可以隐藏任何列,因此我们在本示例中使用 -13 关闭 1 和 3,这样我们将只看到第二个文件独有的行。

或者您可以使用 grep:

grep -wvFf file1 file2

这里我们使用 -f 让 grep 从 file1 获取它的模式。然后我们告诉它用 -F 将它们视为固定字符串而不是模式,用 -w 匹配整个单词,并只打印不匹配 -v

的行

尝试结合使用 diff 和 sed。

原始差异输出是:

$ diff file1 file2
0a1,2
> /root/new
> /root/new_new

添加 sed 以删除除以“>”开头的行以外的所有内容:

$ diff file1 file2 | sed -n -e 's/^> //p'
/root/new
/root/new_new

这样可以保留顺序。请注意,它还假定您只向第二个文件添加行。