參考

參考

在 的手冊頁中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.

但我仍然無法弄清楚其中的差異。對我來說,\b是 Perl 的字邊界表示法,而\<Vim 的表示法也用於相同目的。
PS:英文不是我的母語。如果您覺得差異很明顯,請原諒我。

答案1

\<匹配單字的開頭
\>匹配單字的結尾
\b會匹配兩個邊界(如果位於末尾或開頭)

這些特殊字元的重要之處在於它們匹配空字串而不是單字邊界本身。字邊界與Posix 表示法中\w價的 [_[:alnum:]](字母 a 到 Z、數字和)表示的字元集相反。_

例子

最後,格雷姆找到一個非常有趣的例子:

$ echo 'acegi   z' | grep -o '[acegi ]*\>' | cat -A
acegi$
$ echo 'acegi   z' | grep -o '[acegi ]*\b' | cat -A
acegi   $ 

目前,此範例表明,有時精確匹配單字結尾而不是單字邊界可能很有用,因為透過匹配單字結尾可以避免使用匹配空格字元。
因此,在一個更有用的示例中,我想說,如果您想匹配非單字字元和該非單字的結尾,則不能使用\>;但也許\b可以在這種特殊情況下使用,因為它將匹配下一個單字的開頭。

到目前為止,我還沒有想到任何例子。但在我看來,可能有一些用例是有意義的,但我的猜測是,它只是出於可讀性的目的,因為當你把\b它放在模糊的地方,但如果你精確地開始或結束單詞,那麼它可以更好地理解正則表達式給閱讀它的人。

答案2

回答你標題上的問題?

\b和有什麼差別\<...

幾乎沒有。兩者都匹​​配邊界,單字和非單字之間的過渡。

唯一的技術的差別在於:

  • 匹配\b邊界兩個都單字的開頭和結尾。
  • 唯一\<匹配的是開始一句話。
  • 唯一\>匹配的是結尾一句話。

實際的差別在於:

$ echo ',,abc...' | grep -o '[abc.,]*'
,,abc...                                   # match the whole string

$ echo ',,abc...' | grep -o '[abc.,]*\b'
,,abc                                      # to the rightmost (due to *) word boundary.

$ echo ',,abc...' | grep -o '[abc.,]*\>'
,,abc                                      # match to the same point (in this case).

$ echo ',,abc...' | grep -o '[abc.,]*\<'   
,,                                         # match to the rightmost **start** of a word.

對於空格也可以做同樣的事情(新增 cat 以顯示空格):

直到最右邊的「單字邊界」(任意)(注意空格):

$ echo 'abcd     abcd    Z' | grep -o '[a-z ]*\b' | cat -A
abcd     abcd    $

直到最右邊的「單字開始」(同一點):

$ echo 'abcd     abcd    Z' | grep -o '[a-z ]*\<' | cat -A
abcd     abcd    $

直到最右邊的「字尾」(無尾隨空格):

$ echo 'abcd     abcd    Z' | grep -o '[a-z ]*\>' | cat -A
abcd     abcd$

或者,使用 sed:

四字邊界:

$ echo "abc %-= def." | sed 's/\b/ |>X<| /g'
 |>X<| abc |>X<|  %-=  |>X<| def |>X<| .

兩個字的開頭:

$ echo "abc %-= def." | sed 's/\</ |>X<| /g'
 |>X<| abc %-=  |>X<| def.

以及單字的兩個結尾:

$ echo "abc %-= def." | sed 's/\>/ |>X<| /g'
abc |>X<|  %-= def |>X<| .

參考

來自 GNU 資訊 sed:

'\b'
匹配單字邊界;也就是說,如果左側的字符是“單字”字符並且右側的字符是“非單詞”字符,則它匹配,反之亦然。

     $ echo "abc %-= def." | sed 's/\b/X/g'
     XabcX %-= XdefX.

開始

'<' 符合單字的開頭。

     $ echo "abc %-= def." | sed 's/\</X/g'
     Xabc %-= Xdef.

結尾

'>' 符合單字的結尾。

     $ echo "abc %-= def." | sed 's/\>/X/g'
     abcX %-= defX.

相關內容