grep:“^。”不正确匹配

时间:2010-08-26 22:31:21

标签: regex posix grep

有人可以解释为什么此代码无法按预期工作吗? 我希望它只匹配第一个字符,它与文字字符匹配,但通配符(。)和字符类表现奇怪:

我使用-o只是为了证明事物的匹配方式,它根本不会改变匹配的东西。

$ echo foo | grep -o '^.'
f
o
o

更意想不到的行为:

$ echo foobarbazquux | grep -o '^[foarqux]'
f
o
o

$ echo foobarbazquux | grep -o '^.[^u]'
fo
ob
ar
ba
zq

基本上,行首匹配器(^)在这些情况下的行为不如预期。有没有办法让它表现得更正常?

2 个答案:

答案 0 :(得分:5)

找到它:

Bug

Changelog of fix

显然已在2.5.2中修复。通过启动板找到它。

答案 1 :(得分:0)

从我的Ubuntu 10.04框中:

marc@panic:~$ echo foo | grep -o '^.'
f
marc@panic:~$ echo foobarbazquux | grep -o '^[foarqux]'
f
marc@panic:~$ echo foobarbazquux | grep -o '^.[^u]'
fo
marc@panic:~$ grep --version
GNU grep 2.5.4

grep会查找一系列环境变量来控制其行为/输出,因此请检查是否有任何设置。很可能你已经设置了'GREP_OPTIONS'。