使用模式文件的逆向 grep 不会显示不匹配的内容

使用模式文件的逆向 grep 不会显示不匹配的内容

我有两个几乎相同的文件,“foo” 和 “bar”

每个文件有数千行,每行一个数字。

如果我sort然后同时处理diff两个文件,结果如下:

$ diff foo bar
5984a5985,5986
> 15676
> 15677
7703,7706d7704
< 17486
< 17487
< 17488
< 17489

但是,如果我grep -Fvf同时提交两个文件,则两个方向上的“不匹配”均为零:

$ grep -Fvf foo bar
$ grep -Fvf bar foo
$

这是为什么?我不应该得到类似于 diff 的结果吗?我希望第一个命令返回 diff 上值的“前半部分”,第二个 grep 命令返回其余部分。

为什么我没有得到预期的结果?

答案1

因为diffgrep -Fvf线条出现的顺序很重要。此外,由于-xgrep 命令中不包含该选项,因此仅包含部分匹配被排除在输出之外。

可重现的示例

考虑这两个文件:

$ cat foo
156
174
15676
17486
17487
$ cat bar
15677
15678
156
174
15676

diff命令显示它们不同,但grep命令没有产生任何输出:

$ diff foo bar
0a1,2
> 15677
> 15678
4,5d5
< 17486
< 17487
$ grep -Fvf foo bar; grep -Fvf bar foo

如果我们添加-x需要全行匹配,那么 grep 会产生:

$ grep -Fvxf foo bar
15677
15678
$ grep -Fvxf bar foo
17486
17487

附加建议

作为阿布利格在评论中提出建议,diff -u提供更多上下文,可以使输出更容易理解。

相关内容