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/.*/
p
}
Sorry fuer die bescheidene Formatierung
Gruß
Bernhard