Warum funktioniert mein Perl-Regex nicht, um bestimmte Zeichenfolgen nach Zeilenumbrüchen zu entfernen?

337
Somenath Sinha

Ich habe einen Text, der so aussieht

text \centering more text 

Ich möchte es konvertieren in:

text more text 

Perl verwenden

Mein Code lautet:

perl -00 -pe 's/\R+\\centering\R+/\n/g' example.md 

Es funktioniert überhaupt nicht!

Beachten Sie, dass dies und meine Alternative

perl -00 -pe 's/\\centering/*/g' example.md 

produzieren die Ausgabe

text * more text 

Und

perl -00 -pe 's/\R+/\n*/g' example.md 

produziert

text *\centering *more text 

Sie arbeiten also einzeln, aber nicht zusammen. Was mache ich hier falsch ?!

2

1 Antwort auf die Frage

2
Toto

Verwenden Sie es nicht 0als Plattenbegrenzer, es ist bequemer zu verwenden777

perl -0777 -pe 's/\R+\\centering\R+/\n/g' example.md # ^^^ 

produziert das gewünschte Ergebnis.

Aus der Dokumentation :

Der Sonderwert 00 bewirkt, dass Perl Dateien im Absatzmodus verschluckt. Jeder Wert von 0400 oder höher führt dazu, dass Perl die Dateien als Ganzes verschluckt. Der Standardwert 0777 ist jedoch normalerweise der für diesen Zweck verwendete Wert.

Wie Ihr Zitat erklärt, aktiviert "-00" "Absatzmodus" anstelle von "" und verwendet "0" als Datensatzbegrenzer "*. Der Absatzmodus ist eine vollkommen gültige Option. Nur weil das OP Ihre Antwort akzeptiert hat, habe ich allen Grund zu der Annahme, dass es sich nicht um eine bewusste Entscheidung handelt. Borodin vor 6 Jahren 0