我有兩個幾乎相同的文件,“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
產生更多上下文,可以使輸出更容易理解。