Talvez algo como:
sed 's/: /./;s/\(\([^.]*\.\)[^,]*\), /\
/;P;D'
São duas linhas ( \<LF> pode ser substituído por \n com algumas implementações sed ).
O comando D é uma maneira de implementar while loops em sed . Ele remove a primeira linha do espaço padrão e, desde que haja algo remanescente no espaço padrão, tudo começa novamente com o que resta. Então, o acima pode ser lido como:
do {
- change ": " to "." so we start with "23.a, b, c"
- change "23.x, y, z" to "23.x\n23.y, z"
- print the first line ("23.x"): P
- remove it
} while (pattern space is not empty)
Não precisamos que o primeiro comando s faça parte do loop, mas para evitar isso, precisaríamos usar um tipo de loop mais detalhado como o uso de rótulos ( : ) e de comandos de ramificação ( b , t ).