有人可以解释为什么这段代码不能按预期工作吗? 我希望它只匹配第一个字符,并且它与文字字符匹配,但通配符 (.) 和字符类的行为很奇怪:
我使用 -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
本质上,行首匹配器 (^) 在这些情况下的行为并不符合预期。有什么办法让它表现得更正常吗?
来自我的 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”。