Hilfe zu regulären Ausdrücken

Hi,
für eine Übungsaufgabe soll die Ausgabe von ls -l in html-code umgewandelt werden und dabei nur bestimmte informationen angezeigt werden (user-rechte, besitzer, filegrösse, file-name).

ich bin mittels folgenden RE soweit, wie oben beschrieben, gekommen:

s/\(^[^]\+\) \*[[:digit:]]\* \([^]\+\) [^]\+ \*\([[:digit:]]\+\) .\* \([^]\+\)$/
\1\2\3_[\4/jetzt zeigt er schon in einer html-tabelle:drwxr-...](%255C%2522%255C4%255C%2522)_

Hi Christian,

warum denn alles so kompliziert machen? Die eleganteste Lösung ist nicht immer die, die 23.000 Funktionen und Seiteneffekte in möglichst nur eine Zeile verpackt, sondern diejenige, die funktioniert und die man nach ein paar Stunden/Tagen/Wochen immer noch verstehen und ggf. warten kann. Also: Mut zum Mehrzeiler!

In etwa so (sinngemäß, natürlich nicht in der Form lauffähig):

($rechte, $links, $user, $group, …) =
($ls_line =~
m/(^[^]+) *[[:digit:]]* ([^]+) [^]+ *([[:digit:]]+) .* ([^]+)$/
);

jetzt den ‚Rechte‘-String separat bearbeiten

anschliessend ausgeben

Gruß
Bernhard

Hi Bernhard,

danke für die Antwort. Leider hab ich mich unpräzise ausgedrückt. Mir gings nicht darum, alles in eine Zeile zu packen. Dummerweise soll diese Aufgabe nicht mit Perl, sondern mit dem sed (stream-editor) gelöst werden.

Habs ausprobiert, aber er akzeptiert nichts dergleichen, man muß alles in diesen Ausdruck packen, sonst kennt er die Var \1 nicht mehr.

Das ganze skript sieht bis jetzt so aus:

#!/usr/bin/sed -f
# erzeugt html file aus dem aufruf ls -l

# html-header vorweg
1i\
\
\

1. zeile (total 29) verwerfen

1d

drwxr-xr-x 2 chris group 1389 Oct 16 09:13 index.html

RE: \1:=userrechte \2:=user \3:=size \4:=filename

s/(^[^]+) *[[:digit:]]* ([^]+) [^]+ *([[:digit:]]+) .* ([^]+)$/
\1\2\3_[\4/# abschließend html$a\\Idee?GrussChristian Bei …_

Hallo nochmal,

auch sed kennt die Möglichkeit, mehrere Aktionen hintereinander in Blöcken auszuführen…

Ich würde es dann etwa so machen:

#!/usr/bin/sed -nf

-n : keine automatische Ausgabe der Zeilen

Zeile 1 - Inhalt durch html-Header ersetzen

1 {
s/.*//
p
}

Rest - als Tabelle umformatieren

drwxr-xr-x 2 chris group 1389 Oct 16 09:13 index.html

RE: \1:=userrechte \2:=user \3:=size \4:=filename

2,$ {

erste Ersetzung - Tabellengrobaufbau (Zeile) …

s/(^[^]+) *[[:digit:]]* ([^]+) [^]+ *([[:digit:]] +) .* ([^]+)$/\1\2\3_\4_/

zweite Ersetzung: Spalte 1 (und nur diese mit Bildern …)

umformatieren

s/^d// … (html: Bild fuer directory) …/

weitere Ersetzungen …

#und ausgeben
p }

$ {

abschließend html

s/.*/:confused:
p
}

Sorry fuer die bescheidene Formatierung
Gruß
Bernhard