grep 正则表达式 空白行为

发布于 2024-10-03 16:39:23 字数 508 浏览 5 评论 0原文

我有一个文本文件,包含以下内容:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

撩起发的微风 2024-10-10 16:39:23

这看起来像是 grep 2.5 和更新版本之间处理 \s 的行为差异(旧 grep 中的错误?)。我用 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

可能不太麻烦(因为 \s 没有记录):

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

我的建议是避免使用 \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:

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

whereas

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

Probably less trouble (as \s is not documented):

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

My advice is to avoid using \s ... use [ \t]* or [[:space:]] or something like it instead.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文