Wie kann ich tun, bulk-suchen und ersetzen mit Perl?
Habe ich das folgende Skript nimmt in einer Eingabe-Datei Ausgabe-Datei und
ersetzt die Zeichenfolge in der Eingabe-Datei durch eine andere Zeichenfolge und schreibt
die Ausgabe-Datei.
Möchte ich das Skript ändern, um die traverse durch ein Verzeichnis der Dateien
d.h. statt der Aufforderung für die Eingabe und Ausgabe von Dateien, das Skript nehmen sollte
als argument einen Pfad wie C:\temp\allFilesTobeReplaced\ und
Suche für einen string x und Ersetze es mit y für alle Dateien, die unter
Verzeichnis-Pfad und schreiben Sie die gleichen Dateien.
Wie mache ich das?
Dank.
$file=$ARGV[0];
open(INFO,$file);
@lines=<INFO>;
print @lines;
open(INFO,">c:/filelist.txt");
foreach $file (@lines){
#print "$file\n";
print INFO "$file";
}
#print "Input file name: ";
#chomp($infilename = <STDIN>);
if ($ARGV[0]){
$file= $ARGV[0]
}
print "Output file name: ";
chomp($outfilename = <STDIN>);
print "Search string: ";
chomp($search = <STDIN>);
print "Replacement string: ";
chomp($replace = <STDIN>);
open(INFO,$file);
@lines=<INFO>;
open(OUT,">$outfilename") || die "cannot create $outfilename: $!";
foreach $file (@lines){
# read a line from file IN into $_
s/$search/$replace/g; # change the lines
print OUT $_; # print that line to file OUT
}
close(IN);
close(OUT);
InformationsquelleAutor shubster | 2009-05-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Einsatz des perl-single-liner
kann kombiniert werden mit
File::Find
zu geben, die folgenden single-Skript (dies ist eine Vorlage, die ich für viele solcher Operationen).InformationsquelleAutor Beano
Können Sie dies mit der -i param:
Nur Prozess alle Dateien, die als normal, enthalten aber -ich.bak:
Sollte dieser Prozess bei jeder Datei, und benennen Sie die ursprüngliche original.bak Und natürlich kann man es als ein one-liner wie erwähnt von @Jamie Cook
InformationsquelleAutor chris
Versuchen, diese
Nehmen Sie auch einen Blick auf glob-Perl:
InformationsquelleAutor Boris Guéry
Ich weiß, Sie können mit einem einfachen Perl-one-liner von der Befehlszeile aus, wobei Dateiname kann aus einem einzelnen mit dem Namen oder eine Liste von Dateinamen. Könnte man wahrscheinlich kombinieren Sie dies mit bgy Antwort, um die gewünschte Wirkung:
Und ich weiß, es ist banal, aber das klingt viel wie die sed, wenn Sie die gnu tools verwenden:
InformationsquelleAutor Jamie Cook
perl -pi -e 's#OLD#NEW#g' Dateiname.
Sie können ersetzen Sie den Dateinamen mit dem Muster, das passt Ihre Datei Liste.
InformationsquelleAutor user1799846