grep:“^。”与 grep 2.5.1 及更早版本不正确匹配

问题描述 投票:0回答:2

有人可以解释为什么这段代码不能按预期工作吗? 我希望它只匹配第一个字符,并且它与文字字符匹配,但通配符 (.) 和字符类的行为很奇怪:

我使用 -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

本质上,行首匹配器 (^) 在这些情况下的行为并不符合预期。有什么办法让它表现得更正常吗?

regex posix grep
2个回答
5
投票

找到了:

错误

修复变更日志

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


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”。

© www.soinside.com 2019 - 2024. All rights reserved.