grep regex whitespace 行为

我有一个包含类似的文本文件:


12,34 EUR 
5,67 EUR
...


有一个 whitespace 正面 '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]

比赛?

OS: Ubuntu 10.04, grep v2.5
已邀请:

知食

赞同来自:

它看起来像处理行为的差异
\s

之间 grep 2.5 和更多的新版本 /旧时出错 grep?/. 我确认了你的结果 grep 2.5.4, 但是你四个人 grep 使用时工作 grep 2.6.3 /Ubuntu 10.10/.

笔记:


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


可能不那么少的问题 /因为
\s

没有记录/:


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


我的建议 - 避免使用
\s

..., 相反,使用
[ \t]*

或者
[[:space:]]

或类似的东西。

要回复问题请先登录注册