为什么egrep -o不会返回整场比赛?

时间:2014-11-14 16:22:44

标签: regex grep

我有一个文件" foo"其中包括以下内容:

mPosixHello
mPosixWorld
mPosix->ThisWontPrint()
mPosix.NorWillThis()

从命令行输入:

egrep 'mPosix\B+' foo

正如人们所料,它会返回:

mPosixHello
mPosixWorld

现在,让我们将命令更改为:

egrep -o 'mPosix\B+' foo

输出回报不是我所期望的:

mPosix
mPosix

这是为什么?我希望看到与第一次运行相同的输出。我认为-o打印出匹配的实际子串而不是整行(在这种情况下,除了换行之外它们是相同的东西?嗯......)

一些有用的信息:

> egrep --version
egrep (GNU grep) 2.12


> uname -a
Linux TSU-Debian-Dev 3.2.0-4-amd64 #1 SMP Debian 3.2.63-2 x86_64 GNU/Linux

任何见解都表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:3)

\ B不是一个字符类。它是word boundry锚类似于$(行尾)或^(行首)

锚是一个不同的品种。它们根本不匹配任何角色。相反,它们匹配字符之前,之后或之间的位置。它们可用于在正确的位置“锚定”正则表达式匹配。

TLDR;

anchors!=字符类,

\ b和\ B基本上忽略+和*