grep命令中的\b和\<有什么区别

dul*_*shi 6 linux command-line grep

在 的手册页中grep,我看到

The symbols \< and \> respectively match the empty string at the beginning and  
end of a word.  The symbol \b matches the  empty  string at  the  edge  of  a  word.
Run Code Online (Sandbox Code Playgroud)

但我仍然无法弄清楚其中的区别。对我来说,\b是 Perl 的词边界表示法,而\<Vim 的表示法也是出于同样的目的。
PS:英语不是我的母语。如果差异对您来说很明显,请原谅我。

Kiw*_*iwy 11

\<匹配单词的开头 匹配单词
\>的结尾
\b如果在结尾或开头,则匹配两个边界

这些特殊字符的重要之处在于它们匹配一个空字符串而不是单词边界本身。单词边界与Posix 表示法中\w[_[:alnum:]](字母 a 到 Z,数字和_)等价 的字符集相反。

例子

最后,Graeme 找到了一个非常有趣的例子

$ echo 'acegi   z' | grep -o '[acegi ]*\>' | cat -A
acegi$
$ echo 'acegi   z' | grep -o '[acegi ]*\b' | cat -A
acegi   $ 
Run Code Online (Sandbox Code Playgroud)

目前,这个例子表明有时精确匹配词尾而不是词边界是有用的,因为通过匹配词尾避免了匹配空格字符的使用。
所以在一个更有用的例子中,我会说如果你想匹配非单词字符和这个非单词的结尾,你不能使用\>; 但也许\b可以在这种特殊情况下使用,因为它将匹配下一个单词的开头。

到目前为止,还没有一个例子能够让我想到。但在我看来,可能有一些用例是有意义的,但我的猜测是它只是出于可读性目的,因为当你说的\b时候很模糊,但如果你精确地开始或结束这个词,那么它可以更好地理解正则表达式给阅读它的人。