SED Befehl für html-Datei

Hallo Experten,
ich muss in einer html-Datei für unser Intranet (Apache) jeden Montag die Links für den Speiseplan neu sezten. Diese Arbeit möchte ich gerne automatisieren. Nun weiß ich schon, dass dies (auch?) mit dem SED-Befehl geht, scheine aber doch ein Syntax-Problem zu haben. Wie muß der Befehl aufgebaut sein, wenn ich in der html-Datei die Zeichenfolge woche1 durch woche2, woche2 durch woche3 usw. ersetzen will? Insgesamt gibt es 6 Durchläufe, bis wieder mit woche1 begonnen wird.
Mein script sieht so aus:
SED ‚s/woche6/woche7/g‘ temp.html
SED ‚s/woche5/woche6/g‘ temp.html
.
.
.
SED ‚s/woche7/woche1/g‘ temp.html
mv temp.html [Eingabedatei]

Das script läuft durch. Die Eingabedatei wird zum aktuellen Zeitpunkt zurückgeschrieben, aber innerhalb der Eingabedatei hat sich nichts verändert.

Was mache ich falsch? Oder hat jemand noch eine bessere Idee?
Leider habe ich fast null Ahnung von Unix.
Vielen Dank für Eure antworten.

SED ‚s/woche6/woche7/g‘ temp.html
SED ‚s/woche5/woche6/g‘ temp.html
.
.
.
SED ‚s/woche7/woche1/g‘ temp.html
mv temp.html [Eingabedatei]

Hmmm, hab mit sed jetzt auch schon lange nichts mehr gemacht, aber soweit ich weiß kann man die ganzen sed befehle in ein script stecken, so dass alle nacheinander auf derselben eingabe abgearbeitet werden:
–> scriptfile
s/woche6/woche7/g
s/woche5/woche6/g

s/woche7/woche1/g
temp.html
mv temp.html Eingabe

Was mir oben auffällt, wenn jedesmal der sed mit dem eingabefile aufgerufen wird, dann kann sich am ende eigentlich nur woche7 in woche1 geändert haben, da das eingabefile sich ja nicht ändert.

Hallo Experten,

Hi,

wen meinst Du?

ich muss in einer html-Datei für unser Intranet (Apache) jeden
Montag die Links für den Speiseplan neu sezten.

*Oergs* Kann der kein PHP/Perl/CGI/sonstige Sprache?

Gruss vom Frank.

der wahrscheinlich schon, aber ich nicht! bin da blutiger Anfänger!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Experten,

Selber hallo,

Mein script sieht so aus:
SED ‚s/woche6/woche7/g‘ temp.html
SED ‚s/woche5/woche6/g‘ temp.html
.
.
.
SED ‚s/woche7/woche1/g‘ temp.html
mv temp.html [Eingabedatei]

du meinst sicher sed (SED war mal der PDS-Vorgänger, UNIX unterscheidet zwischen Groß- und Kleinschreibung ).

So wie du es schreibst wird siebenmal nacheinander aus den Daten der Eingabedatei eine neue Ausgabedatei generiert (übrig belibt dann de facto nur die letzte Änderung). Also: entweder du schreibst alle Änderungskommandos in ein sed-Script oder du übergibst mehrere Kommandos aauf einmal. In etwa so:

sed -e 's/woche7/woche8/g' \
 -e 's/woche6/woche7/g' \
 -e 's/woche5/woche6/g' \
 -e 's/woche4/woche5/g' \
 -e 's/woche3/woche4/g' \
 -e 's/woche2/woche3/g' \
 -e 's/woche1/woche2/g' \
 -e 's/woche8/woche1/g' temp.html
mv temp.html [Eingabedatei]

(Der ‚Trick‘ mit der Woche 8 ist notwendig, damit keine Mehrfachänderungen derselben Zeile passieren - du willst ja schließlich keine Änderungen der Form 7 -> 1 -> 2 …).

Und demnächst lernen wir dann Perl.

gruss
bernhard

Hallo Bernhard,

der Trick mit der Woche8 war meiner schon mit Woche7, definitiv sind es nur 6 Wochen. Mein Fehler war der fehlende mv-Befehl nach jedem sed. Aber so wie du das aufschreibst, scheint es ja noch weniger „Schreibarbeit“ zu sein. Steht bei dir nach jeder Zeile ein CR oder muss ich die seds fortlaufend hintereinander editieren?

Bin im übrigen für Neues (Perl) immer aufgeschlossen!

Danke und Grüße
MW

Hallo MW,

der Trick mit der Woche8 war meiner schon mit Woche7,
definitiv sind es nur 6 Wochen.

(konnte ich ja nicht wissen).

mv-Befehl nach jedem sed. Aber so wie du das aufschreibst,
scheint es ja noch weniger „Schreibarbeit“ zu sein. Steht bei
dir nach jeder Zeile ein CR oder muss ich die seds fortlaufend
hintereinander editieren?

Bei mir sind es mehrere Zeilen (der Zeilenumbruch durch einen Backslash geschützt, damit die Shell den Befehl nicht sofort zur Ausfürhung übernimmt). Man kann auch alle sed-Befehle in eine Zeile schreiben, dann wirds allerdings unübersichtlich.

Bin im übrigen für Neues (Perl) immer aufgeschlossen!

Okay, dann also los:

perl -i.bak -pe 's/woche([1-6])/"woche" . ($1+1)/eg' Eingabedatei

sollte dein ganzes Problem in einem Rutsch lösen (alte Datei steht als Backup unter ‚Eingabedatei.bak‘).

Danke und Grüße

gern geschehen
bernhard