先要明确“全字匹配”的含义。“全字匹配”是指匹配的部分两边没有word constituent(字母、数字和下划线),而不是要求匹配的部分全部由word constituent组成。例如, 在"@@hello@@""查找'@hello@'的时候,是满足全字匹配的,因为它两边都是@,而@不是word constituent.
-w 是指与整个正则表达式匹配的部分是"全字匹配"
\b和\< \>不要求与整个正则表达式怎么样,而只分别要求在两个\b和\< \>之间的要是"全字匹配".此外,\b表示的是 the empty string at the edge of a word,而\< \> RESPECTIVELY match the empty string at the beginning and end of a word. 所以,在"@@hello@@""查找'@hello@'的时候,用-w可以匹配,但是用\b或\< \>都不可以,因为夹在两个@之间的empty string不是word的edge,也不是word的beginning或ending. 同时要注意,红色部分说明了\< \>和\b的不同. 这点看下面例子:
(下面几行保存在文件grep.test里)
kk@bb kk@abb |
grep '\b.bb\b' grep.test 可以在上面两行找到匹配,而grep '\<.bb\>' grep.test只能在第二行找到匹配.用\b的时候,在第一行里,正则表达式里的"."匹配了@.左边的\b匹配的是kk后面的empty string;第二行里,"."匹配了a,左边的\b匹配的是abb前面的empty string. 而用\< \>的时候,第一行kk后面的empty string不能与\<匹配,因为这个empty string是the end of a word,而\<匹配的是the beginning of a word
可以说,-w, \b, \< \>的要求的具体性是逐步上升的
转载请注明出处 http://fornote.blogspot.com/
订阅:
博文评论 (Atom)
感谢!解决了困惑我很久的问题。
回复删除