OT: Scripting-Frage: Strings ersetzen
Hallo Liste, evtl. etwas OT, aber da hier ja ein paar Scripting-Spezis lesen, bin ich wohl trotzdem ander richtigen Adresse. Folgendes möchte ich machen: In diversen Konfigurationsdateien und Scripts möchte ich 'automagisch' eine Pfadangabe ändern. Normalerweise schwebt mir da folgende sed-Zeile vor: sed -i -e 's#/alter/Pfad#/neuer/Pfad#g' Datei Das funktioniert soweit auch, allerdings wird so natürlich jede Zeichenkette "/alter/Pfad" geändert. Es gibt aber auch Zeilen in den zu ändernden Dateien, in denen dieser Pfad bestehen bleiben soll. Einziges Erkennungsmerkmal, ob der Pfad wirklich zu ändern ist, ist dass der Pfad so ganz allein in einer Zeile steht. Beispiel für verschiedene Vorkommensformen: /alter/Pfad/Datei <-- soll nicht geändert werden execute blabla /alter/Pfad <-- soll nicht geändert werden /alter/Pfad <-- soll geändert werden Stehe gerade etwas aufm Schlauch, wie ich diese Unterscheidungen möglichst einfach hinbekomme. Nach Zeilennummern geht nicht, da diese von Datei zu Datei anders sein können. Danke schonmal, Jens -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Jens Nixdorf schrieb (26.4.2007):
In diversen Konfigurationsdateien und Scripts möchte ich 'automagisch' eine Pfadangabe ändern. Normalerweise schwebt mir da folgende sed-Zeile vor:
sed -i -e 's#/alter/Pfad#/neuer/Pfad#g' Datei
Das funktioniert soweit auch, allerdings wird so natürlich jede Zeichenkette "/alter/Pfad" geändert. Es gibt aber auch Zeilen in den zu ändernden Dateien, in denen dieser Pfad bestehen bleiben soll. Einziges Erkennungsmerkmal, ob der Pfad wirklich zu ändern ist, ist dass der Pfad so ganz allein in einer Zeile steht.
Beispiel für verschiedene Vorkommensformen:
/alter/Pfad/Datei <-- soll nicht geändert werden execute blabla /alter/Pfad <-- soll nicht geändert werden /alter/Pfad <-- soll geändert werden
sed -i -e 's#^/alter/Pfad$#/neuer/Pfad#g' Datei (^<regexp>$ = Die Zeile besteht aus <regexp>, s. auch 'man sed') Gruß Kimmo -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Donnerstag, 26. April 2007 schrieb K. Elo:
sed -i -e 's#^/alter/Pfad$#/neuer/Pfad#g' Datei
(^<regexp>$ = Die Zeile besteht aus <regexp>, s. auch 'man sed')
Gruß Kimmo
Ha, fast gleichzeitig ;) Du warst wohl ein bischen schneller... Danke... mfG, Jens -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Donnerstag, 26. April 2007 schrieb Jens Nixdorf:
Stehe gerade etwas aufm Schlauch, wie ich diese Unterscheidungen möglichst einfach hinbekomme. Nach Zeilennummern geht nicht, da diese von Datei zu Datei anders sein können.
Wie so oft, fällt mir kurz nachdem ich meine Mail abgeschickt habe, doch noch die Lösung ein. Falls es jemanden interessiert: Die Metazeichen ^ und $ funktionieren auch bei sed ;) Also: sed -i -e 's#^/alter/Pfad$#/neuer/Pfad#g' Datei tut genau was ich will. Wenn das mal alle machen würden ;) Trotzdem Danke an alle, die sich schon Gedanken gemacht haben (oder es getan hätten). mfG, Jens -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (2)
-
Jens Nixdorf
-
K. Elo