sed: Pattern wird nicht erkannt
Hallo listige, habe da ein klitzekleines Problem mit sed: Ich muß Text ersetzen, der wie folgt aussieht: $PDF_OPTIONS['COPYRIGHT'] = Jetzt hammer da wohl Zeichen drin, dass er durcheinander kommt: ' oder [ Wie bekomme ich den Teil jetzt gefunden, denn sed -e '/s/ $PDF_OPTIONS['COPYRIGHT'] ="(C) MyFirma"/ $PDF_OPTIONS['COPYRIGHT'] ="Andere Firma "/' datei.txt haut da nicht mehr hin... Scheint mir gar ein Quoting-Problem zu sein? Grübel... Bernhard ______________________________________________________________________________ Horoskop, Comics, VIPs, Wetter, Sport und Lotto im WEB.DE Screensaver1.2 Kostenlos downloaden: http://screensaver.web.de/?mc=021110:
* Am Don, 02 Okt 2003 schrieb Bernhard Derks:
Hallo listige,
habe da ein klitzekleines Problem mit sed:
Ich muß Text ersetzen, der wie folgt aussieht: $PDF_OPTIONS['COPYRIGHT'] =
Jetzt hammer da wohl Zeichen drin, dass er durcheinander kommt: ' oder [
Wie bekomme ich den Teil jetzt gefunden, denn
sed -e '/s/ $PDF_OPTIONS['COPYRIGHT'] ="(C) MyFirma"/ $PDF_OPTIONS['COPYRIGHT'] ="Andere Firma "/' datei.txt
haut da nicht mehr hin... Scheint mir gar ein Quoting-Problem zu sein?
Dann maskiere diese Zeichen mit \ Gruß Christoph -- Christoph Maurer - Tux#194235 - christoph-maurer at gmx.de
Christoph Maurer wrote:
* Am Don, 02 Okt 2003 schrieb Bernhard Derks:
Wie bekomme ich den Teil jetzt gefunden, denn sed -e '/s/ $PDF_OPTIONS['COPYRIGHT'] ="(C) MyFirma"/ $PDF_OPTIONS['COPYRIGHT'] ="Andere Firma "/' datei.txt haut da nicht mehr hin... Scheint mir gar ein Quoting-Problem zu sein?
Dann maskiere diese Zeichen mit \
Das "$" ist auch ein besonderes Zeichen in Regexen. Sei nicht sparsam mit dem '\', das kostet dich nur wenig und so die das fuer mich aussieht, solltest du das nur bei den '()' nicht anbringen Eine andere Herangehensweise waere, den Teil zu suchen, der auch geaendert wird "/(C) MyFirma/Andere Firma/" -- Have fun, Peter
* Bernhard Derks schrieb am 02.Okt.2003:
Hallo listige,
habe da ein klitzekleines Problem mit sed:
Ich muß Text ersetzen, der wie folgt aussieht: $PDF_OPTIONS['COPYRIGHT'] =
Jetzt hammer da wohl Zeichen drin, dass er durcheinander kommt: ' oder [
Wie bekomme ich den Teil jetzt gefunden, denn
sed -e '/s/ $PDF_OPTIONS['COPYRIGHT'] ="(C) MyFirma"/ $PDF_OPTIONS['COPYRIGHT'] ="Andere Firma "/' datei.txt
haut da nicht mehr hin... Scheint mir gar ein Quoting-Problem zu sein?
Ja, zum einen das ' das das ' der shell beendet und zum anderen das [ in sed hat ' keine besondere Bedeutung, wohl in der shell, die darum liegt. Mit dem ' vor COPYTIGHT beendest Du die '-Umgebung, die Du mit '/s/ begonnen hast. Das kannst Du vermeiden, indem Du vor dem ' ein \ setzt. In sed hat [ eine besondere Bedeutung. Alles was zwichen [ und ] steht, wird als Zeichenmenge gewertet von dem genau eins genommen werden kann. Hier also C oder O oder P oder Y oder R oder I oder G oder H oder T, die ' nimmt ohne davorstehenden \ schon die shell weg und steht nicht zur Verfügung. Wenn Du nicht eine Menge haben willst, sondern das Zeichen [ so muß Du davor ein \ setzen. Hier wertet aber nicht die shell aus, sondern sed. Ob Du auch vor dem ] ein \ setzt ist schon fast philosophisch. Notwendig ist es nicht, da ] nur in der [..] Umgebung eine besondere Bedeutung hat. Aber da Du nun das [ Maskiert hast, ist es keine solche Umgebung. Bernd -- Bitte die Etikette beachten: http://www.suse-etikette.de.vu/etikette.html Bitte Realnamen angeben, kein Vollquoting, kein Html, PGP oder Visitenkarten benutzen. Signatur mit "-- " abtrennen, bei Antworten "Re: " voranstellen, sonst nichts. |Zufallssignatur 4
Hallo, Am Thu, 02 Oct 2003, Bernhard Derks schrieb:
Jetzt hammer da wohl Zeichen drin, dass er durcheinander kommt: ' oder [
Wie bekomme ich den Teil jetzt gefunden, denn
sed -e '/s/ $PDF_OPTIONS['COPYRIGHT'] ="(C) MyFirma"/ ^was soll denn das da?
$PDF_OPTIONS['COPYRIGHT'] ="Andere Firma "/' datei.txt
haut da nicht mehr hin... Scheint mir gar ein Quoting-Problem zu sein?
Korrekt. Folgendes geht: sed 's/\( $PDF_OPTIONS\['"'COPYRIGHT'"'\] =\)"(C) MyFirma"/\1"Andere Firma"/' sed "s/\( \$PDF_OPTIONS\['COPYRIGHT'\] =\)\"(C) MyFirma\"/\1\"Andere Firma\"/" Die inneren ' als \' zu maskieren funktioniert bei mir nicht, AFAIK sollte es aber funktionieren, also so: sed 's/\( $PDF_OPTIONS\[\'COPYRIGHT\'\] =\)"(C) MyFirma"/\1"Andere Firma"/' Achso, wenn du mehrere solche Ersetzungen hast, dann ist es praktischer, ein sed-script zu verwenden: ==== #! /bin/sed -f s/\( $PDF_OPTIONS\['COPYRIGHT'\] =\)"(C) MyFirma"/\1"Andere Firma"/ s/.../.../ ==== Das dann mit sed -f aufrufen oder ausfuehrbar machen und dann als ./sed-script aufrufen. HTH, -dnh -- 'Tell me, what is happiness?' 'Happiness? Happiness... is to wake up, on a bright spring morning, after an exhausting first night spent with a beautiful... passionate... multi-murderess.' -- Use of Weapons, Prologue, by Iain M. Banks
participants (5)
-
B.Brodesser@t-online.de
-
Bernhard Derks
-
Christoph Maurer
-
David Haller
-
Peter Wiersig