使用模式檔案的反向 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

對於diff,與 不同的是grep -Fvf線條出現的順序很重要。另外,由於該-x選項未包含在 grep 命令中,因此僅包含以下內容的行部分匹配被排除在輸出之外。

可重現的例子

考慮這兩份文件:

$ 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產生更多上下文,可以使輸出更容易理解。

相關內容