Zum Inhalt springen

Frage zum Befehl "sed"


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

*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 ?

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

Geschrieben

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

Geschrieben

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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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