Copie essas linhas para o buffer de retenção (depois, exclua-as) e, quando estiver na última linha, anexe o conteúdo do buffer de retenção ao espaço 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ê pode escrever como
some command | sed '1,NUMBER{H;1h;d;};$G'
Aqui está outra maneira com ol ' ed
(ele r
ead a saída de some command
no buffer de texto e, em seguida, m
oves linhas 1,NUMBER
após o la $
t one):
ed -s <<IN
r ! some command
1,NUMBERm$
,p
q
IN
Observe que, como foi apontado, ambos falharão se a saída tiver menos de NUMBER
+ 1 linhas. Uma abordagem mais sólida seria ( gnu sed
syntax):
some command | sed '1,NUMBER{H;1h;$!d;${g;q;};};$G'
este só apaga linhas nesse intervalo, desde que não seja a última linha ( $!d
) - senão substitui o espaço padrão com o conteúdo do buffer de retenção ( g
) e depois q
uits (após a impressão o espaço padrão atual).