grep 正则表达式 空白行为
我有一个文本文件,包含以下内容:
12,34 EUR
5,67 EUR
...
“EUR”之前有一个空格,我忽略 0,XX EUR。
我尝试过:
grep '[1-9][0-9]*,[0-9]\{2\}\sEUR' =>不匹配!
grep '[1-9][0-9]*,[0-9]\{2\} EUR' =>成功了!
grep '[1-9][0-9]*,[0-9]\{2\}\s*EUR' =>成功了!
grep '[1-9][0-9]*,[0-9]\{2\}\s[E]UR' =>工作了!
有人可以解释一下,为什么我不能使用 \s
而是使用 \s*
和 \s[E]
匹配吗?
操作系统:Ubuntu 10.04,grep v2.5
I have a textfile, containing something like:
12,34 EUR
5,67 EUR
...
There is one whitespace before 'EUR' and I ignore 0,XX EUR.
I tried:
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 !
Can somebody explain me pls, why I can't use \s
but \s*
and \s[E]
matched?
OS: Ubuntu 10.04, grep v2.5
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这看起来像是 grep 2.5 和更新版本之间处理
\s
的行为差异(旧 grep 中的错误?)。我用 grep 2.5.4 确认了你的结果,但是当使用 grep 2.6.3 (Ubuntu 10.10) 时,你的所有四个 grep 都可以工作。注意:
虽然
可能不太麻烦(因为
\s
没有记录):我的建议是避免使用
\s
...使用[ \t]*< /code> 或
[[:space:]]
或类似的内容。This looks like a behavior difference in the handling of
\s
between grep 2.5 and newer versions (a bug in old grep?). I confirm your result with grep 2.5.4, but all four of your greps do work when using grep 2.6.3 (Ubuntu 10.10).Note:
whereas
Probably less trouble (as
\s
is not documented):My advice is to avoid using
\s
... use[ \t]*
or[[:space:]]
or something like it instead.