Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Frage zum Befehl "sed"

Empfohlene Antworten

Veröffentlicht

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

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

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

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

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.