Simplemente copie esas líneas en el búfer de retención (luego bórrelas) y cuando esté en la última línea agregue el contenido del búfer de retención al espacio del patrón:
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
Con gnu sedusted podría escribirlo como
some command | sed '1,NUMBER{H;1h;d;};$G'
Aquí hay otra forma con ol ' ed( rdirige la salida some commandal búfer de texto y luego malinea 1,NUMBERlas líneas después de la $última):
ed -s <<IN
r ! some command
1,NUMBERm$
,p
q
IN
Tenga en cuenta que, como se señaló, ambos fallarán si la salida tiene menos de NUMBER+1 líneas. Un enfoque más sólido sería ( gnu sedsintaxis):
some command | sed '1,NUMBER{H;1h;$!d;${g;q;};};$G'
este solo elimina líneas en ese rango siempre que no sean la última línea ( $!d); de lo contrario, sobrescribe el espacio del patrón con el contenido del búfer de retención ( g) y luego quits (después de imprimir el espacio del patrón actual).