Ich muss alle .config-Datei in einem bestimmten Verzeichnis abrufen und in jeder dieser Dateien muss ich nach einer bestimmten Zeichenfolge suchen und durch eine andere ersetzen, basierend auf der Datei.
Zum Beispiel, wenn ich 3 Dateien im angegebenen Verzeichnis habe:
%Vor%Bitte lassen Sie mich wissen, wie dies in Perl gemacht werden kann?
Unten ist der Code, den ich beim Shell-Scripting ausprobiert habe:
%Vor%Wenn Sie auf einer Unix-ähnlichen Plattform arbeiten, können Sie Perl in der Befehlszeile verwenden; Sie müssen kein Skript schreiben.
%Vor%Um auf der sicheren Seite zu sein, möchten Sie vielleicht den Befehl mit der Backup-Option verwenden.
%Vor%Falls Sie das wirklich nur mit Perl machen müssen, was ich nicht empfehlen kann, da es bereits ausgezeichnete und einfachere Antworten gibt, geht hier:
%Vor%Bitte beachten Sie, dass dies mit einfachen Such- und / oder Shell-Platzhaltern viel einfacher ist. Aber nehmen Sie dies als ein kleines Tutorial zur Verarbeitung von Dateien mit Perl sowieso.
Obwohl es über die Befehlszeile ausgeführt werden kann, möchten Sie manchmal einfach ein leicht verwendbares Skript, das eine etwas nützlichere Ausgabe bietet. In diesem Sinne ist hier eine Perl-Lösung mit freundlicher Ausgabe für jeden, der diese Frage durchläuft.
%Vor%Vielleicht wird das folgende hilfreich sein:
%Vor% Ein Hash von Arrays (HoA) wird von split
in den Zeilen |
-determined DATA erstellt, wobei der Schlüssel der Dateiname und der Wert eine Referenz auf ein anonymen Array ist, dessen zwei Elemente für die Ersetzung vorgesehen sind auf der Datei. Die Schreibweise local $^I = '.bak'
erstellt Backups der Originaldateien.
Möglicherweise müssen Sie die Substitution anpassen. Zum Beispiel werden Wortgrenzen in der Substitution beobachtet, indem \b
in s/\b\Q$replacements{$file}[0]/$replacements{$file}[1]/g;
verwendet wird. Sie können oder wollen nicht das.
Ich schlage vor, dass Sie zuerst nur eine "Scratch" -Datei ausprobieren, um sicherzustellen, dass Sie die gewünschten Ergebnisse erhalten, bevor Sie sie vollständig implementieren - obwohl die Originaldateien gesichert sind.
Dein Skript ist ein guter Versuch.
Es enthält einige Redundanzen:
cp
$f
$TFILE
ist ebenfalls nutzlos (schreibe einfach die sed
-Ausgabe direkt in die Zieldatei) Sie können $NEW
und den Zieldateinamen aus dem Wert von $f
ohne den Verzeichnispfad erstellen, den Sie wie folgt erhalten: