echo "abc:cde;123:456" | sed -r 's/([^:]+)(;.*:)([^:]+$)/\3/'
输出结果是abc:456然后echo "abc:cde;123:456" | sed -r 's/([^:]+)(;.*:)([^:]+$)/\3\3\3/'
输出结果是abc:456456456这个是为什么?按理解第3个分组应该是456吧?

解决方案 »

  1.   

    这分组就不对吧,([^:]+)是abc     (;.*:)是 ;123:   ([^:]+$)是456 ,那:cde呢
      

  2.   

    然后你这么分,可能就没把  abc:  算进去了,   cde是分组1    ;123:是分组2     456是分组3
      

  3.   

    嗯,问题是单独输出一次第三组是abc:456,但是连续输出3次第三组就变成abc:456456456;这里有点难理解,([^:]+$)匹配应该是非:吧,这里应该是匹配456吧?
      

  4.   


    你这么分组,就把abc排除在外,cde是分组1    ;123:是分组2     456是分组3,你用sed替换,就是把cde;123:456提换成组3,也就是456,最后结果不就是abc:456,然后第二条,把cde;123:456替换成3个组3,结果就是abc:456456456了