Sed modifizieren 2er Textstellen in einem Schritt

Hallo,

ich möchte in einer Datei 2 Zeilen modifizieren. Die Datei wird von einem Programm ausgelesen und hat verschiedene Optionen die man an das Programm übergeben kann
Die erste Zeile habe ich schon: (Hier kann eine Ausführungszeit eingetragen werden)

sed -e ‚s//#‘?’# SET UNTIL TIME .*/SET UNTIL TIME = ‚‘’’"$DUP_TIME"’’’;/g’ $orig_templ >$rman_templ

Jetzt möchte ich noch die Zeile mit dem Begin " #?# db_file_name_convert …" modifizieren

Kann ich das in einem Schritt machen, oder muß ich die Textdatei dafür in eine Zwischendatei kopieren ?

Ich habe in einem Buch was gefunden, das man mehrere Befehle in {} setzen kann, aber das habe ich nicht hinbekommen.
#!/usr/bin/sed -e

{s/#’?’# SET UNTIL TIME .*/SET UNTIL TIME = ‚‘’’"$DUP_TIME"’’’;/
s/#’?’# db_file_name_convert .*/db_file_name_convert = ‚‘’’"$SRC_PFAD"’’’;/
} g $orig_templ >$rman_templ

Die Fehlermeldung:
bash: ./sed_programm: line 5: unexpected EOF while looking for matching `’’
bash: ./sed_programm: line 8: syntax error: unexpected end of file

Dazu kommt noch das ich beim db_file_name_convert Variablen übergeben will, die so aussehen: /app/ora/quelle bzw /app/ora/ziel .
Wie maskiere ich das, das ich nicht alle „/“ in der Pfadvariablen noch maskieren muß ?

Sorry, ich habe von sed überhaupt keinen Plan, das habe ich mir schon aus einem Buch und den Weiten des Internets zusamengesucht.

Grüße und danke für´s Lesen

Chris

Hallo chrisD,

ich möchte in einer Datei 2 Zeilen modifizieren.

Ohne daß ich jetzt deine sed-Kommandos überprüft habe (sie sind leider etwas unübersichtlich), möchte ich dir den Tipp geben, sie einfach in eine Datei zu schreiben, sagen wir mal in die Datei sed.txt:

s//\#'\?'\# SET UNTIL TIME .\*/SET UNTIL TIME = '\'''"$DUP\_TIME"'\'';/g
s/\#'\?'\# db\_file\_name\_convert .\*/db\_file\_name\_convert = '\'''"$SRC\_PFAD"'\''

Diese Datei übergibst Du dann einfach mit der Option -f an sed

sed -f sed.txt $orig\_templ \>$rman\_templ

Wie gesagt, ich habe jetzt einfach deine zwei Ersetzungsbefehle blind übernommen, also kontrolliere das nochmal. Auch ob dein Ersetzungsausdruck tatsächlich so kompliziert aussehen muss.

Viele Grüße
Marvin

Gelöst…
Hallo

ich habe das ohne die Klammern gelöst und noch einen Tip bekommen.
Man kann statt der „/“ als Trenner auch ein „%“ nehmen, dann kann man in der Variablen so viele „/“ übergeben wie man will.

Aber danke für´s lesen

sed -e ‚s%#‘?’# SET UNTIL TIME .*%SET UNTIL TIME = ‚‘’’"$DUP_TIME"’’’;%g
s%#’?’# db_file_name_convert .*%db_file_name_convert = ‚(‘’’’’"$SRC_PFAD’"’,’"’$DEST_PFAD"’’’’)%g’ $orig_templ >$rman_templ

Grüße

Chris

Hallo Marvin,

danke dir für die Antwort, ich werde mir das mit der Programmdatei ansehen.

Das sieht so kompliziert aus, weil ich an allen Ecken und Enden „’“ und Klammern und so brauche.

Aber es kann gut sein das ich irgendwo ein-zwei Hochkommata zuviel drin habe, da muß ich nochmal nachzählen :smile:
Interessanterweise nörgelt sed da nicht rum (oder nicht immer)

Ich wünsche ein schönes Wochenende !

Grüße

Chris