Verwenden von Perl Regex über mehrere Zeilen

1

Ich möchte alle Vorkommen in einer Datei ersetzen:

ab
ba

Mit diesem:

a a

Ich habe das Offensichtliche versucht:

$ perl -i -p -e 's/ab\nba/a a/' file.txt

Ohne Erfolg. Wie geht das?

Ich kann keine Fragen finden, die diese Frage richtig artikulieren.

Robz
quelle

Antworten:

1

-pVerarbeitet die Eingabe ohne weitere Optionen zeilenweise. Nach dem darf keine Zeile mehr stehen \n. Sie müssen das Datensatztrennzeichen ändern:

perl -i~ -0pe 's/ab\nba/a a/' file.txt
  • -i~ändert die Datei "an Ort und Stelle" und hinterlässt ein Backup (benannt file.txt~)
  • -0macht das Zeichen \0zum Trennzeichen für Eingabesätze. Das Wichtigste ist, dass es in der zu ersetzenden Zeichenfolge nicht vorkommt, sodass es nie nur einen Teil davon liest.
  • -p Liest die Datei Datensatz für Datensatz und führt nach jedem Lesen den Code aus und gibt die Standardvariable aus $_
  • -e Führt nur den Code ein.
Choroba
quelle