Você poderia escolher um caractere que provavelmente não ocorreria em seu arquivo de texto, preceder o nome do pai + o caractere a cada linha filho, classificar e depois remover o nome pai e o separador de cada linha filho, por exemplo. com gnu
sed e um caracter baixo ascii como \x02
sed '/^[^[:blank:]]/h;//!G;s/\(.*\)\n\(.*\)/\x02/' infile | sort | sed 's/.*\x02//'
Como funciona:
o primeiro sed
faz o seguinte:
/^[^[:blank:]]/h
- copiar linhas não recuadas (pais) sobre espaço de espera
//!G
- em linhas recuadas (filhos) anexar espaço de retenção de conteúdo ao espaço padrão s/\(.*\)\n\(.*\)/\x02/
- troca linhas no espaço padrão substituindo o \n
ewline por \x02
depois disso, sort
e remova tudo até e incluindo \x02
com um segundo sed 's/.*\x02//'