BSD grep和GNU grep之间的字边界差异背后的逻辑

时间:2013-07-31 04:55:06

标签: grep gnu bsd

有人可以解释/帮助我理解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 个答案:

答案 0 :(得分:1)

使用\>指定字边界不适用于BSD grep。请改为[[:<:]]

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