Problem mit Perl Multiline Matching

Ich versuche, ein perl-one-liner zu aktualisieren, einige code, der sich über mehrere Zeilen und Bemerke ein seltsames Verhalten. Hier ist eine einfache text-Datei, die zeigt, dass das problem ich bin zu sehen:

ABCD    START
         STOP    EFGH

Erwartete ich, dass das folgende zu funktionieren, aber es landet nicht ersetzen nichts:

perl -pi -e 's/START\s+STOP/REPLACE/s' input.txt

Nach etwas Experimentieren, fand ich, dass die \s+ im ursprünglichen regex wird mit dem Zeilenumbruch, aber nicht jeder der whitespace auf der 2. Zeile und das hinzufügen einer zweiten \s+ funktioniert auch nicht. So jetzt mache ich den folgenden workaround, das ist das hinzufügen einer intermediate-regex, die nur entfernt die newline:

perl -pi -e 's/START\s+/START/s' input.txt

Dies schafft die folgende temporäre Datei:

ABCD    START            STOP    EFGH

Dann kann ich die original-regex (obwohl die /s wird nicht mehr benötigt):

perl -pi -e 's/START\s+STOP/REPLACE/s' input.txt

Dadurch entsteht die endgültige, gewünschte Datei:

ABCD    REPLACE    EFGH

Scheint es, wie der Zwischenschritt nicht notwendig sein sollte. Bin ich etwas fehlt?

Kommentar zu dem Problem
Ihre Häufig Gestellte Frage im ersten Satz: "perldoc -q match" --> "ich habe Probleme beim matching über mehr als eine Zeile. Was ist Los?" Kommentarautor: tadmc
/s wirkt sich nur auf das, was . entspricht, so daß keiner deiner /ss benötigt werden Kommentarautor: ysth

InformationsquelleAutor der Frage faman | 2011-05-02

Schreibe einen Kommentar