AnDi_P Geschrieben 19. November 2009 Geschrieben 19. November 2009 Hallo zusammen, mir macht der Linux Befehl "sed" ein kleines Problem. Undzwar benutze ich ihn in einem Shell-Script, um einen bestimmten String in einer XML-Datei zu suchen, und zu ersetzen. Das Suchen und ersetzen klappt soweit auch, allerdings wird alles was in der entsprechenden Zeile hinter dem zu ersetzenden String steht, weggeschnitten. Gibt es dort eine Option um dies zu verhindern...? Mein Befehl sieht (laut Gedächtnis) so aus: sed s/subkeyaccid=\".*\"/subkeyaccid=\"${VARIABLE}\"/ < ${QUELLDATEI} > ${TEMP-Datei} Habe es aus auch mit cat und einer Pipe zu sed versucht: cat ${QUELLDATEI} | sed s/subkeyaccid=\".*\"/subkeyaccid=\"${VARIABLE}\"/ >> ${TEMP-Datei} Allerdings auch hier das gleiche Problem. Habe ich irgendetwas übersehen, bzw. nicht bedacht...? Thanks for help! LG AnDi_P Zitieren
charmanta Geschrieben 19. November 2009 Geschrieben 19. November 2009 Wenn Du die richtigen Trennzeichen hast ( und so wie Du "backquotest" sollte das nicht Dein Problem sein :floet: ) dann hätte das funktionieren müssen. Was ist das für ein Linux ? Vielleicht ein Bug ? Schneller Check unter OS/X (BSD) zeigt: mbp-17:~ tc$ cat mytest hallo bli bla blup bi ba butzemann mbp-17:~ tc$ sed 's/bla/BLA/' < mytest hallo bli BLA blup bi ba butzemann mbp-17:~ tc$ Also sollte Dein Ansatz korrekt sein Zitieren
AnDi_P Geschrieben 19. November 2009 Autor Geschrieben 19. November 2009 Hallo, danke für Deine Antwort. Es handelt sich um SuSe 10.3. Mir fällt gerade ein, dass es, soweit ich es richtig in Erinnerung habe, mit festen Werten (also keine Variablen, oder Jokerzeichen) geklappt hat. Also quasi auch so wie in deinem Beispiel. Muss man vllt. bei der Benutzung von Variablen oder Jokerzeichen irgendwas besonderes bei sed beachten? Vielleicht weiß ja noch jemand irgendwas.. Zitieren
charmanta Geschrieben 19. November 2009 Geschrieben 19. November 2009 *grübel* bin ein wenig aus der Übung ... vlt. solltest Du "*" und "$" auch quoten ? Zumindest "$" kann als End-Of-Line interpretiert werden, zumindest in der vi/sed Funktion dünkt mir gräulich :old Was steht denn in den Variablen drin ? Sind die exportiert ? Zitieren
DevilDawn Geschrieben 20. November 2009 Geschrieben 20. November 2009 Das Suchen und ersetzen klappt soweit auch, allerdings wird alles was in der entsprechenden Zeile hinter dem zu ersetzenden String steht, weggeschnitten. Leider fehlt eine Beispielzeile. Hast du daran gedacht das POSIX regex "greedy" sind? Bei sed s/subkeyaccid=\".*\"/subkeyaccid=\"${VARIABLE}\"/ und einer Zeile wie ...subkeyaccid="foo" anotherid="bar" somethingelse="fump" matcht der regex logischerweise "foo" anotherid="bar" somethingelse="fump" und ersetzt dies auch. Ist das der Fall, nutze sed s/subkeyaccid=\"[^\"]*\"/subkeyaccid=\"${VARIABLE}\"/ Beispiel: devil@xi:~> cat sample.txt <tag name="myname" value1="1" value2="xyz"> devil@xi:~> sed -e 's/name=".*"/name="foobar"/' < sample.txt <tag name="foobar"> devil@xi:~> sed -e 's/name="[^"]*"/name="foobar"/' < sample.txt <tag name="foobar" value1="1" value2="xyz"> Zitieren
AnDi_P Geschrieben 23. November 2009 Autor Geschrieben 23. November 2009 matcht der regex logischerweise "foo" anotherid="bar" somethingelse="fump" und ersetzt dies auch. Ist das der Fall, nutze sed s/subkeyaccid=\"[^\"]*\"/subkeyaccid=\"${VARIABLE}\"/ Hallo, vielen Dank für den Tipp, hat funktioniert! Kannst du mir evtl. noch erklären, wie die Shell diesen Ausdruck interpretiert? subkeyaccid=\"[^\"]*\" Also wonach sed dann genau "suchen" soll? Bin leider noch nicht so ganz fit mit regulären Ausdrücken..., Lg Zitieren
DevilDawn Geschrieben 23. November 2009 Geschrieben 23. November 2009 subkeyaccid=\"[^\"]*\" Also wonach sed dann genau "suchen" soll? Im Prinzip: Suche nach subkeyaccid=" gefolgt von 0 oder mehr Zeichen die nicht " sind. gefolgt von einem ". [ ] umschiesst eine Menge von Zeichen, [abc] passt z.B. auf a, b oder c. Der Modifikator ^ am Anfang negiert das. [^"] ist also die Menge aller Zeichen außer das ". [^"]* sind also automatisch alle Zeichen bis zum nächsten ". Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.