replace funktioniert nicht: -bash: !\": event not found

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
tsibi
Beiträge: 269
Registriert: 31.08.2004 20:16:35
Wohnort: Oberfranken
Kontaktdaten:

replace funktioniert nicht: -bash: !\": event not found

Beitrag von tsibi » 25.09.2006 10:11:58

Hallo zusammen,

ich möchte einen HTML-Code in mehreren PHP-Dateien ändern. Der Code enthält die Zeichen " und '. Daher maskiere ich die Anfürhungszeichen mit dem \.
Folgender Befehl funktioniert nicht:

Code: Alles auswählen

replace "<li><a href=\"/ueber-foo/kontakt.php?werben=1-kopf-4\" onMouseOut=\"MM_swapImgRestore()\" onMouseOver=\"MM_swapImage('Werbeflaeche5kopf4','','/images/werben-1-kopf-4_he.gif',1)\"><img src=\"/images/werben-1-kopf-4_gr.gif\" alt=\"Diese Werbefläche ist frei. Klicken Sie darauf und buchen Sie diese bei uns!\" name=\"Werbeflaeche5kopf4\" width=\"118\" height=\"50\" border=\"0\"></a></li>" "<li><a href=\"http://www.domain.de\" target=\"_blank\" onMouseOut=\"MM_swapImgRestore()\" onMouseOver=\"MM_swapImage('Werbeflaeche5kopf4','','/images/domain.gif',1)\"><img src=\"/images/domain.gif\" alt=\"domain.de, Lernen mal ganz einfach!\" name=\"Werbeflaeche5kopf4\" width=\"118\" height=\"50\" border=\"0\"></a></li>" -- *.php
Ich bekomme die Meldung:

Code: Alles auswählen

-bash: !\": event not found
Für eure Hilfe wäre ich sehr dankbar, da ich den Fehler nicht finden kann.

Benutzeravatar
esteel
Beiträge: 242
Registriert: 23.07.2002 11:06:25
Kontaktdaten:

Beitrag von esteel » 25.09.2006 10:20:59

Ohne es wirklich genau angeschaut zu haben ist ! auch ein besonderes Zeichen für die Shell das du escapen musst.
src=\"/images/domain.gif\" alt=\"domain.de, Lernen mal ganz einfach\!\"
i support free software: http://www.fsfe.org/en/fellows/esteel
a great free and opensource FPS game: http://nexuiz.com

tsibi
Beiträge: 269
Registriert: 31.08.2004 20:16:35
Wohnort: Oberfranken
Kontaktdaten:

Beitrag von tsibi » 25.09.2006 10:58:47

danke für deine Antwort.

wenn ich aber auch das ! maskiere, wird es später im HTML-Code als \! ausgegeben. Dabei soll ja nur das ! erscheinen.

Benutzeravatar
blackstream
Beiträge: 143
Registriert: 04.12.2003 21:05:09
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Neuss

Beitrag von blackstream » 25.09.2006 14:28:10

Hallo,

an Deiner Stelle würde ich die beiden Parameter für replace anstatt in doppelte (") in einfache (') Hochkommata setzen und innerhalb des Strings jeweils nur die einzelnen Hochkommata als \' maskieren. Dadurch wird nicht nur der Text lesbarer, sondern die Shell fuhrwerkt auch nicht mehr in den Dingern herum (zwischen doppelten Hochkommata könnte man ja z.B. noch Shellvariablen u.ä. unterbringen, wenn man wollte).

Grundsätzlich spricht natürlich einiges dafür, gleiche HTML-Blöcke aus ein und derselben Quelle zu lesen, anstatt sie per C&P in mehrere PHP-Dateien zu verteilen :wink:

tsibi
Beiträge: 269
Registriert: 31.08.2004 20:16:35
Wohnort: Oberfranken
Kontaktdaten:

Beitrag von tsibi » 25.09.2006 15:47:46

Hi,

danke für deine Idee mit dem Maskieren von '. Das hatte ich auch schon probiert und auch hier eine Fehlermeldung erhalten.

Code: Alles auswählen

replace \
'<li><a href="/ueber-foo/kontakt.php?werben=1-kopf-4" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage(\'Werbeflaeche5kopf4\',\'\',\'/images/werben-1-kopf-4_he.gif\',1)"><img src="/images/werben-1-kopf-4_gr.gif" alt="Diese Werbefläche ist frei. Klicken Sie darauf und buchen Sie diese bei uns!" name="Werbeflaeche5kopf4" width="118" height="50" border="0"></a></li>' \
'<li><a href="http://www.domain.de" target="_blank" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage(\'Werbeflaeche5kopf4\',\'\',\'/images/domain.gif\',1)"><img src="/images/domain.gif" alt="domain.de, Lernen mal ganz einfach!" name="Werbeflaeche5kopf4" width="118" height="50" border="0"></a></li>' -- *.php
Es erschien die Meldung:

Code: Alles auswählen

-bash: syntax error near unexpected token `)'
Jetzt habe ich aber auf das Ausrufezeichen verzichtet und es erst mal so ersetzt.

Die PHP-Dateien werden ggf. einmal überarbeitet - aber im Moment muss es noch so gehn.

Antworten