sh:grep缺席元素(BSD grep)

时间:2014-05-11 06:47:47

标签: grep sh

我试图找出两个变量之间的区别:

left='f012 f013'right='f012 f013 f014'

我需要找到左侧不存在的所有f *。我也尝试了以下也没有工作:

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

谁能告诉我我做错了什么?

2 个答案:

答案 0 :(得分:0)

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

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

man comm开始,-13会抑制第1列中的行(FILE1唯一的行, ie。 haystack,您的命令的输出)和第3列(出现在两个文件中的行),留下FILE2唯一的行, ie。 needles,您正在寻找的f*

答案 1 :(得分:0)

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

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