Suchen und ersetzen in mehreren Dateien?
Jammer
- perl
0 Kess0 Michael Schröpl
Hi,
ich wollte ein Script schreiben, mit dem man alle txt Dateien im aktuellem Verzeichnis nach einem String durchsuchen kann und ihn durch einen zweiten zu ersetzen. Aber leider bekomme ich nur leere txt Dateien als Ergebnis... perl -c und perl -w bringen keine Fehlermeldungen. Woran kann das liegen?
danke.
print "Nach welchem Begriff suchen?\n";
$Search=<STDIN>;
chomp($Search);
print "Durch was ersetzen?\n";
$Ad = <STDIN>;
chomp($Ad);
@AllFiles= glob('*.txt');
foreach $Dateien (@AllFiles)
{
open(DATA, ">$Dateien") or die "Fehler!\n";
while(<DATA>)
{
s/$Search/$Ad/g;
print DATA $_;
}
close(DATA);
}
Hallo Jammer,
open(DATA, ">$Dateien") or die "Fehler!\n";
while(<DATA>)
{
»» s/$Search/$Ad/g;
»» print DATA $_;
}
close(DATA);
Mit diesem Code öffnest Du Deine Dateien im Schreibmodus. Es erfolgt kein Einlesen der Datei. Die While Schleife wird also gar nicht ausgeführt. Somit schließt Du die Datei wieder, ohne etwas geschrieben zu haben.
Du mußt die Dateien erst einlesen, dann schließen und dann noch einmal für die Ausgabe öffnen. In einem Arbeitsvorgang geht das so nicht.
Gruß
Kess
ich wollte ein Script schreiben, mit dem man alle txt Dateien im aktuellem Verzeichnis nach einem String durchsuchen kann und ihn durch einen zweiten zu ersetzen.
Der Informatiker zerlegt das Problem in zwei kleine Teilprobleme.
Teil 1: Ein Perl-Skript, welches die Ersetzung für eine einzelne Datei durchführt.
Teil 2: Ein Mechanismus, der das erste Skript viele Male mit genau einem Parameter aufruft.
Für letzteres würde ich unter UNIX entweder einfach die shell oder (falls rekursiv ganze Bäume durchsucht werden müssen) "find" nehmen. Also keineswegs dasselbe Werkzeug wie für die erste Teilaufgabe, auch wenn man das durchaus in Perl lösen kann. Aber in UNIX-eigenen Mechanismen ist es kürzer und eleganter.