com sed
:
sed '/#Start para/{x;G;s/^\n//;p;s/.*//;x;d};G;s/\n$//;h;$!d' input.file
Para linhas que consistem em #Start para
anexá-lo ao final de hold space
por e x
change: espaço de padrão < - > retenha espaço e, em seguida, retorne os dados de hold appendin G
para padrão . (o mesmo pode ser feito por H
(anexar para manter) e retornar ao padrão por g
). Se o espaço de espera estiver vazio, o espaço de padrão será iniciado com a linha vazia, de forma que seja removido pelas linhas coletadas s/^\n//
e p
rint. Os próximos comandos (até }
) têm como objetivo limpar os espaços de retenção e padrão e ir para a próxima linha.
Para outras linhas (que não consistem em #Start para
) appengin G
mantém espaço no padrão, remove a linha vazia (se o espaço de espera estiver vazio), coloque o espaço de padrão em espera e inicie o novo loop d
elete tudo se não for a última linha. Se a última linha imprime o espaço de padrão formado como padrão.