Tha*_*Guy 5 linux bash grep command-line
我有两个几乎相同的文件,"foo" 和 "bar"。
每个文件有数千行,每行一个数字。
如果我sort然后diff两个文件,这是结果:
$ diff foo bar
5984a5985,5986
> 15676
> 15677
7703,7706d7704
< 17486
< 17487
< 17488
< 17489
Run Code Online (Sandbox Code Playgroud)
但是,如果我有grep -Fvf两个文件,我在两个方向上都会得到零个“不匹配”:
$ grep -Fvf foo bar
$ grep -Fvf bar foo
$
Run Code Online (Sandbox Code Playgroud)
这是为什么?我不应该得到类似于 diff 的结果吗?我希望第一个命令返回 diff 值的“前半部分”,第二个 grep 命令返回其余部分。
为什么我没有得到预期的结果?
Joh*_*024 10
对于diff不同于grep -Fvf,的顺序线出现问题。此外,由于该-x选项未包含在 grep 命令中,因此仅具有部分匹配的行将从输出中排除。
考虑这两个文件:
$ cat foo
156
174
15676
17486
17487
$ cat bar
15677
15678
156
174
15676
Run Code Online (Sandbox Code Playgroud)
的diff命令显示它们是不同的,而grep命令没有产生输出:
$ diff foo bar
0a1,2
> 15677
> 15678
4,5d5
< 17486
< 17487
$ grep -Fvf foo bar; grep -Fvf bar foo
Run Code Online (Sandbox Code Playgroud)
如果我们添加-x到 require 全行匹配,则 grep 产生:
$ grep -Fvxf foo bar
15677
15678
$ grep -Fvxf bar foo
17486
17487
Run Code Online (Sandbox Code Playgroud)
正如abligh在评论中所建议的,diff -u产生更多的上下文,这可以使输出更容易理解。