为什么`sed -e's / [0-9] * /&&/'`的输入变化很小,结果却大不相同?

时间:2020-01-28 18:20:04

标签: unix sed

我试图理解以下结果和差异,为什么当[0-9] *匹配123时结果不是 abc 123 123

  • 为什么第一个答案不是abc 123 123

    $ sed -e 's/[0-9]*/& &/' <<<'abc 123'
     abc 123
    
  • 为什么第二个结果为123 123 abc

    $ sed -e 's/[0-9]*/& &/' <<<'123 abc'
    123 123 abc
    
  • 为什么第三个空格多余?
    $ sed -e 's/[0-9]*/& &/g' <<<'abc 123'
     a b c  123 123
    

1 个答案:

答案 0 :(得分:3)

sed将使用第一个匹配项。由于[0-9]*不仅匹配3位数字123,还匹配0位数字(空字符串),因此它将与在此处用括号标记的空字符串匹配:()abd 123,并将其替换为{{1} }

如果您使用以下之一:

() ()abd 123

然后您要求它至少匹配 个1位数,然后按照您的期望进行操作。