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 sed
könnte man es schreiben als
some command | sed '1,NUMBER{H;1h;d;};$G'
Hier ist ein anderer Weg mit ol ' ed
(es r
führt die Ausgabe von some command
in den Textpuffer und übergibt dann m
Zeilen 1,NUMBER
nach 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 sed
Syntax):
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 q
beendet (nach dem Drucken des aktuellen Musterbereichs).