我有一个文件" 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
任何见解都表示赞赏。谢谢!
答案 0 :(得分:3)
\ B不是一个字符类。它是word boundry锚类似于$(行尾)或^(行首)
锚是一个不同的品种。它们根本不匹配任何角色。相反,它们匹配字符之前,之后或之间的位置。它们可用于在正确的位置“锚定”正则表达式匹配。
TLDR;
anchors!=字符类,
\ b和\ B基本上忽略+和*