sed & Syntax

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
Benutzeravatar
LeoLinux
Beiträge: 408
Registriert: 24.11.2005 17:58:47
Wohnort: Frankfurt Am Main

sed & Syntax

Beitrag von LeoLinux » 25.02.2011 22:21:47

Hi there,

ich möchte mit Hilfe von SED und eines Bash-"Installer"-Scripts eine php config für ein Webinterface modifizieren.

Die php config enthält folgende Zeile:

Code: Alles auswählen

// $config->custom->session['blowfish'] = null;
Diese möchte ich nun abändern in z.B.:

Code: Alles auswählen

$config->custom->session['blowfish'] = 'MyNewBlowFish';

Dazu wollte ich folgenden SED Befehl verwenden:

Code: Alles auswählen

sed -E -i '' 's/SEARCH-STRING/REPLACE-STRING/' config.php
leider verzweifle ich beim 'Escapen' mit dem Backslash ... und komme irgendwie auf keinen grünen Zweig ;(
Kann mir da jemand einen Ratschlag geben?


Besten Dank & Grüße

robi1
Beiträge: 13
Registriert: 27.12.2010 19:15:10

Re: sed & Syntax

Beitrag von robi1 » 26.02.2011 01:25:23

versuche mal das hier (ist eine Zeile, keine Ahnung wie das hier bei dir angezeigt wird)

Code: Alles auswählen

sed -e 's/^\(\/\/[ ]*\)\($config->custom->session\['\''blowfish'\''\][ ]*=[ ]*\)\(null\)/\2'\''MyNewBlowFish'\''/' config.php
robi

gxyz
Beiträge: 202
Registriert: 26.07.2010 13:54:21
Lizenz eigener Beiträge: MIT Lizenz

Re: sed & Syntax

Beitrag von gxyz » 26.02.2011 11:19:13

LeoLinux hat geschrieben:leider verzweifle ich beim 'Escapen' mit dem Backslash
... wenn im gesuchten Ausdruck '/' vorkommt, kannst Du Dir einige Backslashes sparen,
wenn Du ein anderes Trennzeichen nimmst (das Zeichen nach dem 's' wird automatisch zum Trennzeichen), also z.B.

Code: Alles auswählen

sed ... 's|SEARCH-STRING|REPLACE-STRING|'
Ansonsten hängt der Aufwand sehr davon ab, ob die Zeile, die Du ändern willst exakt so aussieht wie in Deinem Beispiel (Leerzeichen, Apostroph oder Anfuehrungszeichen ...) und ob andere ähnliche Zeilen vorkommen können. Je nachdem kannst Du z.B. auch (ein einziges Escape ;-) etwas wie

Code: Alles auswählen

sed "/config->custom->session.*blowfish.*/ s/.*/\$config->custom->session['blowfish'] = 'MyNewBlowFish';/"
oder gar (ganz ohne, für PHP dürfte es denke ich gleichwertig sein)

Code: Alles auswählen

sed '/config->custom->session.*blowfish.*/ s/.*/$config->custom->session["blowfish"] = "MyNewBlowFish";/'
nehmen ...

Benutzeravatar
LeoLinux
Beiträge: 408
Registriert: 24.11.2005 17:58:47
Wohnort: Frankfurt Am Main

Re: sed & Syntax

Beitrag von LeoLinux » 13.03.2011 22:16:01

@ gxyz
Besten Dank! Damit konnte ich weiterarbeiten ;) Hab den Rest vollens selbst geschafft.

@ robi1
sed -e 's/^\(\/\/[ ]*\)\($config->custom->session\['\''blowfish'\''\][ ]*=[ ]*\)\(null\)/\2'\''MyNewBlowFish'\''/' config.php
^^ Freak ;)) Aber dennoch besten Dank!


Grüße

Antworten