Haltepuffermethode:
sed '$x;1!H;1p;$!d;x;s/\n//
' <<\IN
aaaaaa
bbbbbb
cccccc
dddddd
eeeeee
IN
... das wird Hjede Zeile alt machen, die !nicht die erste ist, und die erste, die sie pdruckt. In der $letzten Zeile werden xdie Halte- und Musterbereiche geändert, bevor die Halte Zeile ausgeführt wird. dDadurch werden die gespeicherten Zeilen an die letzte Zeile angehängt. Anschließend werden alle Zeilen aus der Ausgabe gelöscht, die !nicht die $letzten sind.
In der $letzten Zeile werden xdie Leerzeichen erneut s///geändert, das erste \newline-Zeichen wird ersetzt - das sich um das in Zeile 2 hinzugefügte Zeichen kümmert - und das Los wird dann automatisch gedruckt.
AUSGABE:
aaaaaa
eeeeee
bbbbbb
cccccc
dddddd
ohne Verwendung des Haltepuffers:
cat <<\IN >infile
aaaaaa
bbbbbb
cccccc
dddddd
eeeeee
IN
... nur um Ihr Beispiel in einer tatsächlichen Datei zu speichern ...
sed '1p;$!d;r infile' <infile | sed '3d;$d'
Dass Umleitungen <infilezu den ersten sed‚s stdin, die nur pdie erste Zeile Rints vor dvon Ausgangs alle Zeilen eleting, die !nicht die $letzte. Die letzte Zeile ist autoprinted, aber es ist auch die einzige Linie , auf der der letzte Befehl ausgeführt wird -, die ist rdie gesamte ead heraus infile wieder zu stdout. All das wird über das |Rohr zum zweiten geleitet, seddas dann nur noch dseine dritte und letzte Eingangsleitung von seinem Ausgang entfernen muss, um die Neuanordnung abzuschließen.
AUSGABE:
aaaaaa
eeeeee
bbbbbb
cccccc
dddddd
awkLösungen veröffentlicht haben. Sind Sie ein großersedFan oder haben Sie vielleicht geschriebensed? ;-)