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 sed
você poderia escrever como
some command | sed '1,NUMBER{H;1h;d;};$G'
Aqui está outra maneira com o ol ' ed
(ele r
direciona a saída some command
para o buffer de texto e, em seguida, m
fornece linhas 1,NUMBER
apó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 sed
sintaxe):
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, q
uits (após a impressão do espaço do padrão atual).