2013-07-31 38 views
1

有人可以请解释/帮助我理解BSD grep和GNU grep之间的这种差异背后的逻辑吗?我在比赛下面加了一些插文。BSD grep和GNU grep之间的词边界差异的逻辑

$ grep --version 
grep (BSD grep) 2.5.1-FreeBSD 
$ cat t1 
admin:*:80:root 
$ grep '\<.' t1 
admin:*:80:root 
^^^^^ ^^ ^^^^ 

$ grep --version 
GNU grep 2.6.3 

Copyright (C) 2009 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 
This is free software: you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. 

$ cat t1 
admin:*:80:root 
$ grep '\<.' t1 
admin:*:80:root 
^  ^^ 

看来GNU grep的是得到它的权利和BSD grep的不是。我认为\<应该得到字边界?注grep '\<ad' t1似乎得到同样的结果在这两个版本,例如:

$ cat t2 
admin:*:80:root 
sadmin:*:81:root 
$ grep '\<ad' t2 
admin:*:80:root 
^^ 

是怎么回事?

在此先感谢。

理查德

回答

1

使用\>指定字边界不会为BSD grep工作。改为尝试[[:<:]]

This post为各种实用程序的字边界提供了非常有用的信息。 “

+0

”长期以来,我的一个宠儿就是, 这个词的正则表达式匹配对实现有着恼人的依赖。“ 真实。 – Exit42