Ich schreibe ein Skript zum Anpassen einer Konfigurationsdatei. Ich möchte mehrere Instanzen von Zeichenfolgen in dieser Datei ersetzen und habe versucht, die Aufgabe mit PowerShell auszuführen.
Es funktioniert gut für ein einzelnes Ersetzen, aber das Ersetzen mehrerer Ersetzungen ist sehr langsam, da jedes Mal die gesamte Datei erneut analysiert werden muss und diese Datei sehr groß ist. Das Skript sieht folgendermaßen aus:
$original_file = 'path\filename.abc'
$destination_file = 'path\filename.abc.new'
(Get-Content $original_file) | Foreach-Object {
$_ -replace 'something1', 'something1new'
} | Set-Content $destination_file
Ich möchte so etwas, aber ich weiß nicht, wie ich es schreiben soll:
$original_file = 'path\filename.abc'
$destination_file = 'path\filename.abc.new'
(Get-Content $original_file) | Foreach-Object {
$_ -replace 'something1', 'something1aa'
$_ -replace 'something2', 'something2bb'
$_ -replace 'something3', 'something3cc'
$_ -replace 'something4', 'something4dd'
$_ -replace 'something5', 'something5dsf'
$_ -replace 'something6', 'something6dfsfds'
} | Set-Content $destination_file
quelle
$c = Get-Content $original_file; $c | ... | Set-Content $original_file
.Damit der Beitrag von George Howarth mit mehr als einem Ersatz ordnungsgemäß funktioniert, müssen Sie die Unterbrechung entfernen, die Ausgabe einer Variablen ($ line) zuweisen und dann die Variable ausgeben:
quelle
Mit Version 3 von PowerShell können Sie die Ersetzungsaufrufe miteinander verketten:
quelle
Angenommen, Sie können nur eine
'something1'
oder'something2'
usw. pro Zeile haben, können Sie eine Nachschlagetabelle verwenden:Wenn Sie mehr als eine davon haben können, entfernen Sie einfach die
break
in derif
Anweisung.quelle
Eine dritte Option für einen Einzeiler mit Pipeline besteht darin, die Ersetzungen zu verschachteln:
Und:
Dadurch bleibt die Ausführungsreihenfolge erhalten, sie ist leicht zu lesen und passt problemlos in eine Pipeline. Ich bevorzuge Klammern zur expliziten Kontrolle, Selbstdokumentation usw. Es funktioniert ohne sie, aber wie weit vertrauen Sie dem?
-Replace ist ein Vergleichsoperator, der ein Objekt akzeptiert und ein vermutlich geändertes Objekt zurückgibt. Aus diesem Grund können Sie sie wie oben gezeigt stapeln oder verschachteln.
Bitte sehen Sie:
quelle