Perl: Bedingtes suchen/ersetzen

Guten Tag

In einer oder mehreren Textdateien möchte ich alle " (HEX 034) mit * (HEX 042) ersetzen, allerdings nur dann, wenn keine Komma (, - HEX 044) davor oder dahinter steht.

Ersetzen: bla „weg damit“ bla

Nicht ersetzen: (1) ,„bla (2) bla“,

Wie geht das mit Perl? Mein Ansatz ist:

perl -i.bak -pe „s/“/*/g" test.txt

Fragen:

(1) Wie stelle ich es an " (HEX 034) nicht zu ersetzen, wenn ein Komma davor oder danach steht?

Vielen Dank für Hilfe im Voraus.

Grüsse, Olli

C:\>perl -v

This is perl, v5.10.0 built for MSWin32-x86-multi-thread
(with 1 registered patch, see perl -V for more detail)

Copyright 1987-2007, Larry Wal

Hallo,

(1) Wie stelle ich es an " (HEX 034) nicht zu ersetzen, wenn
ein Komma davor oder danach steht?

MIt look-ahead und look-behind assertions:

s/(?

Siehe hier fuer mehr Details: http://perldoc.perl.org/perlre.html#Extended-Patterns

Gruesse,
Moritz

Hallo Moritz

Vielen Dank für die Hilfe!

Dank dem Link den Du empfohlen hast, konnte ich das Script ein wenig angepassen und jetzt funktioniert es fehlerfrei.

Ein Frage noch:

Wie bringe ich Perl dazu alle *.txt Dateien in einem Verzeichnis zu bearbeiten? So funktioniert es leider nicht:

C:\\>perl -i.bak -pe "s/(?

Grüsse, Olli

C:\>perl -i.bak -pe "s/(?

Also das -w ist falsch, wenn du Warnungen haben willst, musst du es vor den Einzeiler schreiben:

perl -i.back -pwe "..."

Gibt es denn .txt-Dateien im aktuellen Verzeichnis? Wenn nein ist es kein Wunder, dass *.txt keine findent. Falls doch, kannst du das hier probieren:

perl -i.bak -pe "BEGIN { @ARGV = map glob, @ARGV }; s/(?