Thread Spezielles Regex
(4 answers)
Opened by tecker at 2008-11-11 11:39
Hi Leute,
ich müsste eine bestimmtes Verzeichnis rekursiv durchsuchen und in jeder Datei schauen ob das pattern "paragraph{ Text }" vorkommt und ggf. löschen OHNE den in den Klammern enthalten Text zu löschen. Also aus Code: (dl
)
1 Text vor Paragraph, paragraph{ Text in Paragraph}, Text dahinter. Soll werden: Code: (dl
)
1 Text vor Paragraph, Text in Paragraph, Text dahinter. Mein Skript funktioniert erstmal soweit bis auf die Tatsache (wie schon angedeutet), dass die schließende Klammer vom Paragraph BLock auch in der nächsten und übernächsten Zeile vorkommen kann. Ich suche allerdings mit $_ diese ja in der gleichen Zeile. Wie kann ich mein Skript ändern so dass nach dem Auffinden des Patterns "paragraph{" bis zur nächsten schließenden Klammer gesucht wird und diese dann gelöscht wird? Es können auch Blöcke mit geschweiften Klammern vorkommen die nicht paragraph{} sind und demnach nicht gelöscht werden dürfen bzw kann ein paragraph{} Block auch mehrmals in einem File auftauchen. Hier mein Skript: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 #!/usr/bin/perl use strict; use warnings; use File::Find; my @files; my @newcontent; my $muster = ''; find(\&wanted, "/opt/test"); sub wanted { if ( $File::Find::name =~ /$muster/) { print "gefunden .... $File::Find::name \n"; push(@files,$File::Find::name); } return; } foreach my $file (@files) { next if (-d $file); print "Oeffne File .... $file \n"; open(FILE,"<$file") or die "Cant open $file $! \n"; while (<FILE>) { if($_ =~ /paragraph\{/) { $_ =~ s/paragraph\{//g; $_ =~ s/\}//g; push (@newcontent,$_); } else { push(@newcontent, $_); } } close(FILE); open(FH,">$file") or die "cant open $file $! \n"; print FH @newcontent; close(FH); @newcontent = (); } Danke vorab. VG |