Hi,
die letzten Tage habe ich ein wenig mit „sed“ gearbeitet.
Dieser Streaming-Editor funktioniert bekanntlich nicht wie ein normaler Texteditor, sondern dient der Bearbeitung von Dateien mittels Befehlen.
Der wohl häufigste Einsatzzweck von sed ist die Suchen/Ersetzen-Funktion. Mein kleines 1-mal-1 soll euch den Einstieg erleichtern.


Um direkt Änderungen an einem Dokument vorzunehmen, benötigt ihr die Option „-i“ für sed. In meinen folgenden Beispielen habe ich stets damit gearbeitet.
Ohne diese Option arbeitet sed mit STDIN und STDOUT.

Das Standardmuster sieht beim Suchen/Ersetzen folgendermaßen aus: sed -i ’s/<SUCHE>/<ERSETZE>/‘ Datei

Wenn ihr etwas am Anfang der Zeile suchen wollt, muss das Suchwort mit ^ beginnen. Mittels .* am Ende wird die komplette darauffolgende Zeile ersetzt und nicht nur das Suchwort. Das g am Ende der Syntax weist darauf hin, dass nicht nur das 1. Suchergebnis, sondern alle im Dokument ersetzt werden.

sed -i 's/^bind-address.*/bind-address = 0.0.0.0/g' /etc/mysql/my.cnf

Wenn eure Felder ein Hochkommata enthalten, so muss die Suchsyntax mittels doppelten Hochkommata von der Bash interpretiert werden.

Wichtig ist dann aber das Escapen von Sonderzeichen wie $ (Variable in der Bash). Das Slash / muss auch 2mal mittels Backslash \ begonnen werden. Eins dient der Interpretierung der Bash, und das 2. muss für sed genutzt werden.

sed -i "s/^\$DBlib_path.*/\$DBlib_path = '\\/usr\\/share\\/php\\/adodb'\;/g" base_conf.php

Für sed könnt ihr mit „-r“ auch Reguläre Ausdrücke verwenden. Im Beispiel darf bei der Suche ;* beliebig oft vorkommen, darf allerdings auch fehlen. (Der Backslash dient wieder zur Markierung, dass es sich beim Semikolon um kein Sonderzeichne handelt)

sed -ir 's/\;*cert =.*/cert = \/etc\/stunnel\/stunnel.cert/g' /etc/stunnel/stunnel.conf

Zu guter letzt noch das & bei der Suche. Wird es am Ende der Ersetzesyntax gesetzt, so wird der einzufügende Text am Ende des Suchwortes angefügt, statt dieses zu ersetzen. Analog dazu kann das & auch am Anfang gesetzt werden.

sed -i 's/^cert =/;&/' /etc/stunnel/stunnel.conf

Das wars dann auch schon.

Ich hoffe euch nicht all zu viele Falschinformationen geliefert zu haben 🙂