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:]
或类似的东西。