Zum Inhalt springen

Frage zum Befehl "sed"


AnDi_P

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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..:)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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">

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...:rolleyes:,

Lg

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ".

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...