unix fgrep表示完全匹配,但-f文件具有其他元素的子字符串

5n0oy7gb  于 2023-01-08  发布在  Unix
关注(0)|答案(1)|浏览(142)

我有一个奇怪的fgrep问题,似乎是MacOSX特有的(意外的行为不会发生在Ubuntu Linux上)。
我的文件("qlist")中有以下行(没有空格)

CMGC_CDK1
CMGC_CDK2
CMGC_CDK10

我的文件"biglist"中有以下几行:

CMGC_CDK1
CMGC_CDK10
CMGC_CDK11A
CMGC_CDK11B
CMGC_CDK12
CMGC_CDK13
CMGC_CDK14
CMGC_CDK15
CMGC_CDK16
CMGC_CDK17
CMGC_CDK18
CMGC_CDK19
CMGC_CDK2
CMGC_CDK20

我想发出一个fgrep命令,它只返回qlist中内容的精确匹配(逐行)。

fgrep -someflags -f qlist biglist

CMGC_CDK1
CMGC_CDK2
CMGC_CDK10

但是标志-x和-w没有给出预期的结果。
如果我发出命令:

fgrep -w -f qlist biglist

fgrep -x -f qlist biglist

我得到

CMGC_CDK1
CMGC_CDK2

我所期待(和想要)的是:

CMGC_CDK1
CMGC_CDK10
CMGC_CDK2

这就好像搜索项文件(命令中的"qlist")有一行是另一行(CMGC_CDK1,CMGC_CDK10)的子字符串,这在某种程度上抑制了将CMGC_CDK10用作搜索项。
注意:在Ubuntu Linux上,我得到了预期的结果。这似乎是Mac OS X fgrep特有的。我在Mac OS X 10. 15. 1上,在Unix终端窗口中使用默认安装的fgrep进行此操作。
我错过了什么?我该怎么做?
谢谢,罗兰德

kx1ctssn

kx1ctssn1#

在macOS终端中使用GNU grep,它可以按预期工作。

grep -w -f qlist biglist

我的电脑安装了GNU grep。您可以通过以下方式轻松安装:

brew install grep

这将使你的生活更容易作为Mac用户。你也可以安装coreutilities允许你使用GNU版本的命令在Mac终端。你仍然可以使用macOS版本。这也将解决你的cat命令问题。

brew install coreutils

当我尝试使用fgrep时,这是我在macOS终端上收到的警告:

fgrep: warning: fgrep is obsolescent; using ggrep -F
CMGC_CDK1
CMGC_CDK10
CMGC_CDK2

请注意,ggrep在我的系统中只是指GNU grep

相关问题