sh:grep缺失元素(BSD grep)

sh:grep缺失元素(BSD grep),grep,sh,Grep,Sh,我试图找出两个变量之间的差异: 左class='f012 f013'和右class='f012 f013 f014' 我需要找到左边没有的所有f*。我还尝试了以下同样不起作用的方法: echo'f012 f013'| grep-o-v'f012 f013 f014' 有人能告诉我我做错了什么吗?大多数*nix工具要求每行有一项,可能更合适: $ cat haystack f012 f013 $ cat needles f012 f013 f014 $ comm -13 haystack need

我试图找出两个变量之间的差异:

左class='f012 f013'
右class='f012 f013 f014'

我需要找到左边没有的所有f*。我还尝试了以下同样不起作用的方法:

echo'f012 f013'| grep-o-v'f012 f013 f014'


有人能告诉我我做错了什么吗?

大多数*nix工具要求每行有一项,可能更合适:

$ cat haystack
f012
f013
$ cat needles
f012
f013
f014
$ comm -13 haystack needles
f014

从中,
-13
抑制第1列(文件1特有的行,即命令输出的
haystack
)和第3列(出现在两个文件中的行)中的行,保留文件2特有的行,即您要查找的
f*

您可以使用
diff
来比较变量,但您需要将它们分成单独的行,否则它只是比较完整的行,而不是每个字段:

diff <(awk -v RS=" |\n" '$1=$1' <<<"$left") <(awk -v RS=" |\n" '$1=$1' <<<"$right")
2a3
> f014

diff(1)
grep
在输入行上工作,因此您尝试的内容没有意义。(2) 这似乎是一个XY问题。最好告诉我你想完成什么。好的,看。两个变量<代码>左='f012 f013'
右='f012 f013 f014'
。我试图找到不同的元素。在本例中,这是
f014
@jaypal未拖曳,please@Andry你应该用这个更新你原来的帖子,因为它让你的问题与众不同。使用
grep-o
它只打印找到的部分,因此您试图查找不在其中的部分,它不会打印任何内容,因为
f012 f013
不包含
f012 f013 f014
@Andry
grep-vf谢谢您的朋友。Comm适合我。expndtw-1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\。它只是将完整的行与另一个完整的行进行比较。不是一个字段接一个字段。@Jotne“var”的精度跟在我的答案后面,正如@jaypal所提到的,这只是一个