suchen und ersetzen mit sed

Mit sed kann man nach Strings suchen und diese dann durch andere ersetzen. Hört sich recht simpel an, doch in der Praxis kann dies sehr tricky werden wenn man so wie ich gerade erst an der Oberfläche der Shell Programmierung kratzt.

Ich hatte es schon erwähnt, ich tüfftel gerade (wenn ich die Zeit dazu finde) an einem Script welches mir Typo3 installieren soll. Dieses Script funktioniert auch schon sehr gut aber ich habe es noch erweitert, so dass auch gleich ImageMagick mit installiert wird. In der localconf.php muss das Script dann aber auch den Pfad zu ImageMagick ersetzen. Und ein Pfad ist kein einfacher String mehr da in ihm / vorkommen. Das Problem bestand für mich heute nun also nicht einfach nur darin sed anzuwenden um einfach einen String zu ersetzen sondern eine String mit Slashes.

Um die MySQL Daten in die localconf.php zu schreiben verwende ich ebenfalls sed. Dies sind aber wirklich nur einfache Strings. Um den Pfad zu ImageMagick über eine Variable die den Pfad enthält, und automatisch vom Script erzeugt wird, nun mit sed in der localconf.php zu ersetzen kann man da nicht so vorgehen wie es bei den simplen Strings der MySQL Daten möglich ist.

Nach relativ kurzer Zeit bin ich dann durch intensives googlen doch noch zu meinem gesuchten Code-Schnipsel gekommen der es ermöglicht die Slashes in der Variable von sed ignorieren zu lassen und den Pafd vernünftig in die localconf.php zu schreiben.

So funktioniert es wenn KEINE Slashes in der Variable vorkommen:
sed 's.gesuchterString.'$variable'.g' localconf.php > localconf_neu.php

Und so klappts auch mit Slashes:
sed -e 's%'gesuchterString'%'$variable'%g' localconf.php > localconf_neu.php

Damit wird nun eine präparierte localconf.php an den entsprechenden Stellen mit den nötigen Variablenwerten ersetzt und in /typo3conf abgelegt. Auf meinem eigenen kleinen Server hier funktioniert das Script jetzt schon einwandfrei. Aber ich werde es jetzt erst noch auf ein paar anderen Servern testen und wenn alles funktioniert stelle ich es hier auch nochmal detaliert vor.

Leave a Reply