A solução awk do Drav é boa, mas isso significa executar um comando sort por parágrafo. Para evitar isso, você poderia fazer:
< file awk -v n=0 '!NF{n++};{print n,$0}' | sort -k1n -k2 | cut -d' ' -f2-
Ou você pode fazer tudo em perl :
perl -ne 'if (/\S/){push@l,$_}else{print sort@l if@l;@l=();print}
END{print sort @l if @l}' < file
Observe que, acima, os separadores são linhas em branco (para awk one, linhas com apenas espaço ou caracteres de tabulação, para perl one, qualquer caractere de espaçamento horizontal ou vertical) em vez de linhas vazias. Se você quiser linhas vazias, poderá substituir !NF por !length ou $0=="" e /\S/ por /./ .