+ -
当前位置:首页 → 问答吧 → 【sed】简单匹配

【sed】简单匹配

时间:2011-06-28

来源:互联网

echo "123 abc" | sed 's/[0-9]*/(&)/'
显示的结果是:
(123) abc
因为*是所谓的“贪婪”匹配。


echo "123 abc" | sed 's/[0-9]+/(&)/'
显示的结果还是:
123 abc

为什么第二个sed命令没有匹配到123呢?

作者: LeonTown   发布时间: 2011-06-28

“+”元字符规定其前导字符必须在目标对象中连续出现一次或多次,“*”元字符规定其前导字符必须在目标对象中出现零次或连续多次。
所以+的话应该匹配100 000 299 这样有重叠的
$ echo "122 abc" | sed 's/[0-9]*/(&)/'
(122) abc

作者: louyong0571   发布时间: 2011-06-28

难道122不匹配[0-9]+吗?
不都是1到无数个数字吗?

引用 1 楼 louyong0571 的回复:

“+”元字符规定其前导字符必须在目标对象中连续出现一次或多次,“*”元字符规定其前导字符必须在目标对象中出现零次或连续多次。
所以+的话应该匹配100 000 299 这样有重叠的
$ echo "122 abc" | sed 's/[0-9]*/(&)/'
(122) abc

作者: LeonTown   发布时间: 2011-06-28