Não podemos dar uma resposta completa sem um exemplo de sua contribuição, mas posso dizer que sua compreensão dos grupos de captura está errada. Você não usa o sequencialmente, eles só se referem à regex no lado esquerdo do mesmo operador de substituição. Se você capturar, por exemplo, /(foo)(bar)(baz)/
, então foo
será ,
bar
será e
baz
será . Você não pode fazer
s/(foo)//; s/(bar)//
, porque, na segunda chamada s///
, há apenas um grupo capturado, então não será definido.
Então, para capturar seus três grupos de dígitos, você precisaria fazer:
sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/ : : /'
Ou mais legível:
sed -E 's/([0-9]*)\.([0-9]*)\.([0-9]*)/ : : /'