PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SED Ausgabe umdrehen



Romanday
01-06-2005, 10:39
Ich verstehe nicht, warum

ls -al | sed -n -e 'G;h;$p'

die gesammte Ausgabe umdreht.
Am Anfang ist doch Hold Space leer, also wird doch durch G nur \n
angefügt.
G fängt doch aber nicht am Ende der Zeichenkette an zu arbeiten.

peschmae
01-06-2005, 17:58
Bei mir machts das nicht :confused:

Sed kaputt? ;)

MfG Peschmä

Romanday
01-06-2005, 22:56
Bei mir funktioniert es mit:

GNU sed Version 4.1.2

hab es aus:
--
fügt nach jeder Zeile ein Leerzeichen ein (der hold space ist ja leer). Mit sed kann man auch die Funktionsweise von tac (ein umgekehrtes cat; dreht die Reihenfolge der Zeilen um) nachbilden:

bash$ sed -n -e 'G;h;$p'

http://www.tty1.net/sed-tutorium/html/ar01s05.html
--

peschmae
02-06-2005, 06:26
Achso, so umdrehen. Ich dachte links-rechts-irgendwie :D
War wohl noch nicht ganz wach.

Du machst ja nach dem Einlesen von jeder Zeile erst ein G. D.h. alles was bisher gelesen wurde wird _hinten_ am Pattern-Space angehängt (und dann der Pattern-Space komplett in den Hold-Space verschoben).

d.h.
1) G (nichts)
2) h (1. Zeile)
3) p (Ich nehme mal an gibt nix aus weil der Patternspace leer ist)
4) G (-> 2. Zeile im Pattern space, 1. hinten angehängt)
5) h (2. Zeile\n1.Zeile)
etc.

Aber ich verstehe noch nicht ganz wie das mit dem Ausgeben am Ende geht...
255) G (alles-1, verkehrt an letzte Zeile angehängt)
256) h (alles)
257) p (nichts!? - ist ja alles in Hold...)

Achso, der Pattern-Space ist nach einem Hold nicht leer sondern hat das Zeugs immer noch drin - und $p macht irgendwie im Gegensatz zu p nur am Schluss was...

Ach ja, steht ja hier:


Das folgende Beispiel ist wohl das kürzeste sinnvolle Skript in sed, das es gibt. Es gibt die Zeilenanzahl der bearbeiteten Datei aus (wc -l):

bash$ sed -n -e '$='

Das Dollarzeichen '$' ist in diesem Fall nicht das Zeilenende einer RE (es fehlen nämlich die //), sondern ist eine Adresse von sed, die die letzte Zeile des letzten Inputfiles benennt, und das Kommando '=' gibt die aktuelle Zeilennummer vor dem Output aus.


Gute Doku hast du da gefunden :)

MfG Peschmä

Romanday
02-06-2005, 19:50
Gute Doku hast du da gefunden :)

MfG Peschmä

Nicht so gut wie deine Erklärungen.:D
Jetzt hab ich es begriffen. Append war das Schlüsselwort.