Você poderia fazer isso com o sed, sim, mas outras ferramentas são mais simples. Por exemplo:
$ awk '{
printf "%s ", $2;
for(i=3;i<=NF;i++){
printf "%s:%s:1 ",$1,$(i)
}
print ""
}' file
0 565:10:1 565:12:1 565:23:1 565:18:1 565:17:1 565:25:1
1 564:7:1 564:12:1 564:13:1 564:16:1 564:18:1 564:40:1 564:29:1 564:15:1
Explicação
awk irá dividir cada linha de entrada no espaço em branco (por padrão), economizando cada campos como $1, $2, $N. Então:
printf "%s ", $2; imprimirá o segundo campo e um espaço à direita.
for(i=3;i<=NF;i++){ printf "%s:%s:1 ",$1,$(i) }: iterará nos campos 3 até o último campo ( NFé o número de campos) e, para cada um deles, imprimirá o 1º campo, a :, o campo atual e a :1.
print "" : isso apenas imprime uma nova linha final.
Ou Perl:
$ perl -ane 'print "$F[1] "; print "$F[0]:$_:1 " for @F[2..$#F]; print "\n"' file
0 565:10:1 565:12:1 565:23:1 565:18:1 565:17:1 565:25:1
1 564:7:1 564:12:1 564:13:1 564:16:1 564:18:1 564:40:1 564:29:1 564:15:1
Explicação
As -amarcas perlse comportam como awke dividem sua entrada no espaço em branco. Aqui, os campos são armazenados na matriz @F, o que significa que o 1º campo será $F[0], o 2º $F[1]etc. Então:
print "$F[1] " : imprime o segundo campo.
print "$F[0]:$_:1 " for @F[2..$#F];: repita os campos 3 até o último campo ( $#Fé o número de elementos na matriz @F, portanto, @F[2..$#F]pega uma fatia da matriz que começa no terceiro elemento até o final da matriz) e imprime o 1º campo, a :, depois o campo atual e um :1.
print "\n" : isso apenas imprime uma nova linha final.