Installations-Skript - Ersetzen von Zeilen/Strings innerhalb einer Textdatei

XamBonX

Commander
Registriert
Nov. 2002
Beiträge
2.840
Ich krieg die Krise hier mit RegEx und Gedöns.

Ich erstelle einen Installations-Skript, welches die gleiche Commands kann, wie wenn man im Linux Terminal arbeitet.

Nun habe ich eine Datei cfg.ini, innerhalb der Datei ist folgende Zeile

<bbjem bbjem-status="enabled" path="/bbjem">

aus der Zeile soll folgendes werden
<bbjem bbjem-status="enabled" path="/bbjem">
<host>localhost</host>

es soll also quasi eine neue Zeile eingefügt werden...

sudo sed -i "s/<bbjem bbjem-status="enabled" path="/bbjem">/<bbjem bbjem-status="enabled" path="/bbjem">\n<host>localhost</host>/g" path/to/cfg.ini

Tuts aber net....ich will nimmer...
 
Probier mal den forward slash im path attr zu escapen:
sudo sed -i "s/<bbjem bbjem-status="enabled" path="\/bbjem">/<bbjem bbjem-status="enabled" path="/bbjem">\n<host>localhost</host>/g" path/to/cfg.ini
Ergänzung ()

Ich vermute die slashes im replace part müssen auch escaped werden da sie sonst als delimiter erkannt werden:
sudo sed -i "s/<bbjem bbjem-status="enabled" path="\/bbjem">/<bbjem bbjem-status="enabled" path="\/bbjem">\n<host>localhost<\/host>/g" path/to/cfg.ini
Sonderbarer Syntax in sed...
 
@floq0r Da muss noch mehr escpaed werden. so langsam bin ich aber argh irritiert - ich schaue morgen nochmal drauf. Ich bekomme es nicht hin :/
@XamBonX wenn du alles richtig escapest, waere das hier der einfachte weg: https://riptutorial.com/sed/example/9613/insert-line-after-first-match

nimm anstelle von sed "s/.../.../g" lieber "s#...#...#g" Das macht es mmn uebersichtlicher, wenn man auch / in den zu bearbeitenden Strings aht
 
  • Gefällt mir
Reaktionen: abcddcba und DerTiger
Man muss hier nix escapen. Wie schon angemerkt, kann man auch andere Delimiter fuer Sed nutzen, # bietet sich natuerlich an, oder Pipe |, oder ...
 
perl -i.old -pe 's|(<bbjem bbjem-status="enabled" path="/bbjem">)|$1\n<host>localhost</host>|g' cgf.ini

Das sichert auch die alte Datei als cfg.ini.old für den Fall dass was schiefgehen sollte....
 
Zurück
Oben