Emacs正则表达式:什么\ <和\>可以做到\ b不能做?

Yoo*_*Yoo 10 regex emacs cpu-word

Regexp反斜杠 - GNU Emacs手册说,\<在单词的开头匹配,在单词\>的结尾处\b匹配,并匹配单词边界.\b就像在其他非Emacs正则表达式中一样.但似乎\<\>特定于Emacs的正则表达式.是否在某些情况下,\<\>需要的不是\b?例如,\bword\b将匹配相同\<word\>,唯一的区别是后者更具可读性.

Pet*_*r.O 12

如果你认为它们的行为相同,你会得到意想不到的结果.
\ b和<b>可以做什么?
答案是,\<并且\>明确的 ...这个结尾的一个字!而这只是结束!
\b一般的 ....一个词的任何一个结尾都会匹配......

GNU运算符*单词运算符

line="cat dog sky"  
echo "$line" |sed -n "s/\(.*\)\b\(.*\)/# |\1|\2|/p"
echo "$line" |sed -n "s/\(.*\)\>\(.*\)/# |\1|\2|/p"
echo "$line" |sed -n "s/\(.*\)\<\(.*\)/# |\1|\2|/p"
echo
line="cat  dog  sky"  
echo "$line" |sed -n "s/\(.*\)\b\(.*\)/# |\1|\2|/p"
echo "$line" |sed -n "s/\(.*\)\>\(.*\)/# |\1|\2|/p"
echo "$line" |sed -n "s/\(.*\)\<\(.*\)/# |\1|\2|/p"
echo
line="cat  dog  sky  "  
echo "$line" |sed -n "s/\(.*\)\b\(.*\)/# |\1|\2|/p"
echo "$line" |sed -n "s/\(.*\)\>\(.*\)/# |\1|\2|/p"
echo "$line" |sed -n "s/\(.*\)\<\(.*\)/# |\1|\2|/p"
echo
Run Code Online (Sandbox Code Playgroud)

产量

# |cat dog |sky|
# |cat dog| sky|
# |cat dog |sky|

# |cat  dog  |sky|
# |cat  dog|  sky|
# |cat  dog  |sky|

# |cat  dog  sky|  |
# |cat  dog  sky|  |
# |cat  dog  |sky  |
Run Code Online (Sandbox Code Playgroud)