Apenas copie essas linhas para o buffer de espera (exclua-as) e, quando estiver na última linha, adicione o conteúdo do buffer de espera ao espaço do padrão:
some command | sed '1,NUMBER{ # in this range
H # append line to hold space and
1h # overwrite if it's the 1st line
d # then delete the line
}
$G' # on last line append hold buffer content
Com gnu sedvocê poderia escrever como
some command | sed '1,NUMBER{H;1h;d;};$G'
Aqui está outra maneira com o ol ' ed(ele rdireciona a saída some commandpara o buffer de texto e, em seguida, mfornece linhas 1,NUMBERapós o último $):
ed -s <<IN
r ! some command
1,NUMBERm$
,p
q
IN
Observe que, conforme indicado, ambos falharão se a saída tiver menos de NUMBER+1 linhas. Uma abordagem mais sólida seria ( gnu sedsintaxe):
some command | sed '1,NUMBER{H;1h;$!d;${g;q;};};$G'
este exclui apenas as linhas desse intervalo, desde que não sejam a última linha ( $!d); caso contrário, substitui o espaço do padrão pelo conteúdo do buffer de retenção ( g) e, em seguida, quits (após a impressão do espaço do padrão atual).