ren22 hat geschrieben: 07.05.2020 08:52:47
Du koenntest halt mit Variablen oder Funktionen arbeiten, um den Text aus der Verschachtelungstiefe rauszukommen.
einen kleinen Anreiz/Beipiel dazu hast Du nicht zufällig auf Lager?
Das Problem das du doch hast, ist die zusaetzliche Schachtelungstiefe durch das case. Wenn du den sed-Befehl in eine eigene Funktion packst, dann kannst du dadurch erreichen, dass der Code immer auf oberster Ebene *steht*, egal wie tief verschachtelt die Funktion *aufgerufen* wird. Das ist natuerlich ein Umweg auf dem man mehr zufaellig das Gewuenschte erreicht, aber das reicht ja vielleicht.
Code: Alles auswählen
insert_banane()
{
sed -i '' '/<\/foobar>/i \
<obst>\
<beschreibung>gelb und lecker</beschreibung>\
<menge>KG</menge>\
<wert>5</wert>\
</obst>\
' bananen.txt
}
meine_funktion()
{
case "$1" in
banane*)
insert_banane
...code...
esac
}
Oder mit einer Variable:
Code: Alles auswählen
inserttxt='
<obst>\
<beschreibung>gelb und lecker</beschreibung>\
<menge>KG</menge>\
<wert>5</wert>\
</obst>\
'
meine_funktion()
{
case "$1" in
banane*)
sed -i '' '/<\/foobar>/i \
'"$inserttxt"'
' bananen.txt
...code...
esac
}
PS: würde gerne nur bei 'bash/shell & sed' bleiben, keep it small and simple, sollen nicht unnötig viele Programme später auf dem Zielsystem laufen.
Kann ich verstehen, aber du musst dann auch selber dran denken die Werte zu xml-escapen, falls noetig. Ich wollte es auch nur zu Bedenken geben. Falls du oefters und mehr mit XML machst, lohnt es sich, ein XML-Tool zu verwenden. Das bietet letztlich deutlich mehr Zuverlaessigkeit. Wenn du naemlich anfangen musst, Input zu escapen und generiertes XML zu validieren oder gar XML aus anderen Programmen uebernimmst, dann ist es mit nur sed schon bald gar nicht mehr small and simple. Aber fuer ein kleines Helferlein, bei dem es ausreicht, wenn es zu 95% funktioniert, kannst du ruhig erstmal so weiter machen. Ich mache das auch je nach Fall mal so mal so.