Haltepuffermethode:
sed '$x;1!H;1p;$!d;x;s/\n//
' <<\IN
aaaaaa
bbbbbb
cccccc
dddddd
eeeeee
IN
... das wird H
jede Zeile alt machen, die !
nicht die erste ist, und die erste, die sie p
druckt. In der $
letzten Zeile werden x
die Halte- und Musterbereiche geändert, bevor die H
alte Zeile ausgeführt wird. d
Dadurch 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 x
die Leerzeichen erneut s///
geändert, das erste \n
ewline-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 <infile
zu den ersten sed
‚s stdin
, die nur p
die erste Zeile Rints vor d
von 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 r
die gesamte ead heraus infile
wieder zu stdout
. All das wird über das |
Rohr zum zweiten geleitet, sed
das dann nur noch d
seine dritte und letzte Eingangsleitung von seinem Ausgang entfernen muss, um die Neuanordnung abzuschließen.
AUSGABE:
aaaaaa
eeeeee
bbbbbb
cccccc
dddddd
awk
Lösungen veröffentlicht haben. Sind Sie ein großersed
Fan oder haben Sie vielleicht geschriebensed
? ;-)