PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : zwischen bestimmten Zeilen suchen und danach ersetzen


Posti123
12.04.2008, 10:13
Hallo,

habe folgende Datei in der ich gerne suchen und ersetzen möchte:



[sektion1]
comment = Test
path = /home
read only = Yes

[sektion2]
comment = Testing
path = /var
read only = no
guest only = Yes

[sektion3]
comment = Server
path = /etc
guest only = no



Ich möchte nun in der [sektion2] path = /var in path = /opt ändern.

Wie muss ich davor gehen?

Die Zeilenanzahl und die Reihenfolge unter den verschiedenen Sektionen variiert.

So ein richtigen Ansatz konnte ich noch nicht finden da mein Suchbefehl ja mehrmals vorkommt und auch alles was nach dem = steht immer Variabel ist

Kann mir da jemand helfen?

Danke!


Poison Nuke
12.04.2008, 11:20
[sektion2] ist doch ein fester String, oder?

Wenn ja, dann suche einfach erst nach "[sektion2]" und dann nimm dessen Position als startwert und suche nun nach "path =" und dann schlussendlich suchst du noch nach "[sektion3]".

Jetzt vergleichst du, ob die Position von "path =" zwischen den beiden Positionen von 2 und 3 ist, wenn das der Fall ist, dann war die Suche erfolgreich, wenn der Wert aber größer als sek3 ist, dann wurde die path angabe vergessen und du kannst sie so einfügen. Ok, sollte wohl nicht vorkommen, aber das wäre eine von mehreren Absicherungen.

Crusade
10.07.2008, 22:22
Vieleicht über den Ansatz,

<?php
$subject = '[sektion1]
comment = Test
path = /home
read only = Yes

[sektion2]
comment = Testing
path = /var
read only = no
guest only = Yes

[sektion3]
comment = Server
path = /etc
guest only = no';
$pattern = '#(sektion2.*?\/)(var)#is';
$replace = '\1opt';
$result = preg_replace($pattern, $replace, $subject);
?>

[sektion1]
comment = Test
path = /home
read only = Yes

[sektion2]
comment = Testing
path = /opt
read only = no
guest only = Yes

[sektion3]
comment = Server
path = /etc
guest only = no

eViL_oNe
13.07.2008, 20:41
ich könnte mich zwar irren, mein Bauchgefühl sagt mir aber dass solche INI-artige Dateien besser ohne Regex (mit einem eigenen Parser) manipuliert werden können *g*