为什么这个匹配数字的sed命令不起作用?

时间:2013-05-09 14:15:59

标签: linux bash shell sed

我的命令是这样的:

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

(我在vanilla Mac中使用sed

我希望结果是:

Number cats

然而,真正的结果是:

12 cats

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

4 个答案:

答案 0 :(得分:20)

+必须被反击以获得其特殊含义。

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

答案 1 :(得分:16)

扩展+修饰符对我有用:

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

此外,-E开关会使+修饰符有效,请参阅choroba的回答。

答案 2 :(得分:2)

使用perl,这将适用于unix或linux。

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

答案 3 :(得分:0)

以非常神秘的方式解释(至少在我迄今为止的资源中......), 你应该检查下一个术语:

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

对于你的问题,似乎expr'你给sed的是一个正则表达式或扩展的正则表达式....所以通过我读过的教程你应该在sed中的实际命令之前插入-r ...

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

在Ubuntu 16.04中为我工作,bash。