grep正则expression式空白行为

我有一个文本文件,包含如下所示:

12,34 EUR 5,67 EUR ... 

在'EUR'之前有一个空格,我忽略了0,XX EUR。

我试过了:

grep '[1-9][0-9]*,[0-9]\{2\}\sEUR' => didn't match !

grep '[1-9][0-9]*,[0-9]\{2\} EUR' => worked !

grep '[1-9][0-9]*,[0-9]\{2\}\s*EUR' => worked !

grep '[1-9][0-9]*,[0-9]\{2\}\s[E]UR' => worked !

有人可以解释我,为什么我不能使用\s\s*\s[E]匹配?

操作系统:Ubuntu 10.04,grep v2.5

这看起来像是在grep 2.5和更新版本(旧grep中的一个bug)之间处理\s行为差异? 我使用grep 2.5.4来确认你的结果,但是当你使用grep 2.6.3(Ubuntu 10.10)时,你所有的四个grep都可以工作。

注意:

 GNU grep 2.5.4 echo "foo bar" | grep "\s" (doesn't match) 

 GNU grep 2.6.3 echo "foo bar" | grep "\s" foo bar 

可能less麻烦(因为没有logging):

 Both GNU greps echo "foo bar" | grep "[[:space:]]" foo bar 

我的build议是避免使用\s …使用[ \t]*[:space:]或类似的东西。