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
).