PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perl: Suchen und ersetzen über mehrere Zeilen


Gast
2009-09-08, 09:32:36
in mehreren .xml dateien sollen bestimmte einträge ersetzt werden:

beispiel (die leerzeichen am anfang sind durch den dateiaufbau bedingt):
[...]
<format config:type="boolean">true</format>
<lv_name>opt</lv_name>
[...]


hier soll für den informationsbereich von "opt", erkennbar durch
<lv_name>opt</lv_name>

eine zeile darüber das "true" in "false" geändert werden. die anzahl an leerstellen soll erhalten bleiben (allerdings bin ich nicht sicher, ob die anzahl stets gleich sein muss)

Monger
2009-09-08, 09:58:50
Nur der Form halber: könntest du noch bitte eine Frage formulieren? Du willst jetzt den Perl Code haben der das macht, richtig? Was hast du denn bis jetzt bereits?

Gast
2009-09-08, 10:04:15
bisher habe ich ein shellscript gebastelt, dass aber noch nicht wirklich gut erscheint:

perl -0\777 -p -i -e '~s /<format config:type="boolean">true<\/format>. <lv_name>home< \/lv_name>/<format config:type="boolean">false<\/format>\n <lv_name>home<\/lv_name>/s' *.xml


daher suche ich eine umsetzung als perl script. mein problem ist, dass ich nach der zeile mit "opt" zunächst suchen muss und dann eine zeile drüber etwas ändern soll...

Gast
2009-09-15, 16:06:46
Evtl. bist du da mit awk besser bedient. Ansonsten bliebe noch das Zeilenweise einlesen und Zwischenspeichern:


open(FILE, <, "...") or die();
open(OUT, >, "...") or die();

while(<FILE>) {
if(format:config-Zeile) {
Wert merken
} elsif(lv_name-Zeile) {
anders verarbeiten
print OUT ergebnis
} else {
print OUT $_;
}
}