2013-05-04 32 views
1

我用SED练一些命令时,我用以下命令的输出困惑:匹配零个或多个字符在sed

echo 'first:second' | sed 's_[^:]*_(&)_g' 

我的问题是:为什么这个命令只包住字符串“第一“和”第二“括号?

由于我在我的正则表达式中指定了“或更多非冒号”,不应该将冒号也包裹起来吗?

请说明。

+3

冒号本身既不是“零不冒号”(因为它是一个长度为1的字符串)也不是“更多非冒号”(因为它是冒号),所以显然模式不匹配。 – chris 2013-05-04 06:49:42

+0

你会期待什么结果呢?这听起来像你期待'(第一)(:)(第二)',但显然不会发生。或者你的意思是(第一)():(第二)()'? – 2013-05-04 06:49:43

+0

嗨克里斯。感谢您的启发。我明白了代码的意义! – LanceHAOH 2013-05-05 06:46:47

回答

2

您使用

[^:] 

其搜索除了:所有字符。 所以你遇到的是正常的配合。