我有一个文本文件,其中包含以下内容:
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
but \s*
and \s[E]
匹配?
操作系统:Ubuntu 10.04,grep v2.5
这看起来像是处理方面的行为差异\s
grep 2.5 和更新版本之间(旧 grep 中的错误?)。我用 grep 2.5.4 确认了你的结果,但是当使用 grep 2.6.3 (Ubuntu 10.10) 时,你的所有四个 grep 都可以工作。
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
可能麻烦更少(如\s
没有记录):
Both GNU greps
echo "foo bar" | grep "[[:space:]]"
foo bar
我的建议是避免使用\s
... 使用[ \t]*
or [[:space:]]
或类似的东西代替。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)