2013-05-09 92 views
5

我的命令是这样的:为什么这个sed命令匹配号码不起作用?

echo "12 cats" | sed 's/[0-9]+/Number/g' 

(我使用的是sed香草苹果机)

我希望得到的结果是:

Number cats 

然而,真正的结果是:

12 cats 

有没有人有这方面的想法?谢谢!

+0

对于linux,你可以使用'-r'选项来sed,对于Mac,你可以使用'-E' ...这也适用于Linux的一些变种作为兼容性shim – Petesh 2013-05-09 14:27:07

回答

7

扩大+修改工作对我来说:

echo "12 cats" | sed 's/[0-9][0-9]*/Number/g' 

此外,-E开关将使+修改工作,看到choroba的答案。

+0

似乎BSD sed默认不支持'+ .. – 2013-05-09 14:30:18

16

+必须反斜杠以获得其特殊含义。

echo "12 cats" | sed 's/[0-9]\+/Number/g' 
+1

这对我来说也不适用(香草Mac sed)。 – zoul 2013-05-09 14:20:58

+0

@zoul:请参阅http://stackoverflow.com/q/4453760/1030675 – choroba 2013-05-09 14:25:27

+2

啊哈,谢谢! (Mac sed过于保守,无法识别'+'修饰符,'-E'开关打开扩展的正则表达式,其中'+'未转义。) – zoul 2013-05-09 14:29:45

1

使用Perl,这将工作在UNIX或Linux。

echo "12 cats" | perl -pe 's/\d+/Number/g' 
0

在未(在资源至少我迄今..)解释一个非常神秘的方式, 您应该检查了下方面:

通配符(在bash的上下文中) , 正则表达式, 扩展的正则表达式

对于你的问题似乎是你给的sed的EXPR”是一个正则表达式或扩展正则表达式....所以由教程中,我读你应该在你的实际还插入了-r命令在sed ...

回声“12只猫”| sed -r's/[0-9] +/Number/g'

适用于Ubuntu 16.04,bash。

+0

我没有看到它是4年前....可能我的回答不再是关键任何更多哈哈......但它强调我的第一行的答案。 – YigalO 2017-07-08 09:37:17