Beat: Ersetzen von mehreren Wörtern in einer Zeile einer Datei

Beitrag lesen

Bist du sicher dass du
    [A-Za-z0-9]*
meinst und nicht
    [A-Za-z0-9]+

Ich bin mir ehrlich gesagt nicht sicher, aber soweit ich weiß, steht das + doch in den RegEx für EIN od. mehrmaliges Vorkommen, der * hingegen für KEIN od. mehrmaliges Vorkommen oder?

Es muss ja nicht zwangsläufig ein Buchstabe drinstehen oder eine Zahl, es kann nur.

Was die Sache erschwert
"SC-FTP    unsinniger Text" enthält 4 whitespace Zeichen, deutet also auf drei "" Variablen hin.

Codeerläuterung

\b steht für eine Wordboundery ist also die Grenze zwischen \W und \w

s///x
der x Modifier erlaubt es, dass Leerzeichen nicht als Whitespace interpretiert werden. Dadurch kann ich eine RE Lesbar gestalten.
Dafür muss ich jetzt aber whitespace explizit erwähnen: \s steht für genau ein Whitespace Zeichen.

Ich schreibe nochmals, diesmal um klar zu machen, dass Werte optional sind.

foreach( @data ){
    s/^  \bSC-FTP          \s
         (?:[A-Za-z0-9]+)? \s
         (?:[A-Za-z0-9]+)? \s
         (?:[A-Za-z0-9]+)? \s
     /SC-FTP Servername User ID Password /x;
}
und komprimiert:

s/^\bSC-FTP\s(?:[A-Za-z0-9]+)?\s(?:[A-Za-z0-9]+)?\s(?:[A-Za-z0-9]+)?\s/SC-FTP Servername User ID Password /;

Du musst dir absolute Gewissheit über das Format des Strings nach SC-FTP verschaffen.

mfg Beat

--
Woran ich arbeite:
[link:http://www.elcappuccino.ch/cgi/tok.pl?extern=1-pub-com3306-1@title=X-
   <°)))o><                      ><o(((°>o