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 sed
usted podría escribirlo como
some command | sed '1,NUMBER{H;1h;d;};$G'
Aquí hay otra forma con ol ' ed
( r
dirige la salida some command
al búfer de texto y luego m
alinea 1,NUMBER
las 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 sed
sintaxis):
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 q
uits (después de imprimir el espacio del patrón actual).