Kopieren Sie diese Zeilen einfach in den Haltepuffer (und löschen Sie sie dann) und hängen Sie in der letzten Zeile den Inhalt des Haltepuffers an den Musterbereich an:
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
Mit gnu sedkönnte man es schreiben als
some command | sed '1,NUMBER{H;1h;d;};$G'
Hier ist ein anderer Weg mit ol ' ed(es rführt die Ausgabe von some commandin den Textpuffer und übergibt dann mZeilen 1,NUMBERnach dem letzten $):
ed -s <<IN
r ! some command
1,NUMBERm$
,p
q
IN
Beachten Sie, dass - wie bereits erwähnt - beide fehlschlagen, wenn die Ausgabe weniger als NUMBER+1 Zeilen enthält. Ein soliderer Ansatz wäre ( gnu sedSyntax):
some command | sed '1,NUMBER{H;1h;$!d;${g;q;};};$G'
Dieser löscht nur Zeilen in diesem Bereich, solange sie nicht die letzte Zeile sind ( $!d). Andernfalls wird der Musterbereich mit dem Haltepufferinhalt ( g) überschrieben und dann qbeendet (nach dem Drucken des aktuellen Musterbereichs).