Verwenden Sie powershell-Cmdlet "ForEach-Object" und " ersetzen-string mit regex
Verwende ich die unten pipeline zum Lesen einer Datei und ersetzen eine Zeile in es und speichern Sie es auf eine andere Datei, aber festgestellt, dass die Strings in der Ziel-Datei wird nicht ersetzt, es ist immer noch die alte.
original Zeile : name-1a2b3c4d
neue Zeile sollte sein: - name-6a5e4r3h
(Get-Content "test1.xml") | ForEach-Object {$_ -replace '^name-.*$', "name-6a5e4r3h"} | Set-Content "test2.xml"
Alles, was fehlt denn da?
Dein code funktioniert perfekt auf PS2.0 und PS3.0
Haben Sie versucht, mithilfe von XML-parsing? Weiß nicht, ob das zutrifft, aber wenn Sie wissen, in welches element des XML-ersetzen Sie die Zeichenfolge, , kann sein "cleaner"
Haben Sie versucht, mithilfe von XML-parsing? Weiß nicht, ob das zutrifft, aber wenn Sie wissen, in welches element des XML-ersetzen Sie die Zeichenfolge, , kann sein "cleaner"
InformationsquelleAutor user1201530 | 2013-03-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine Sache, die Sie ' re fehlt ist, dass den-replace-operator funktioniert genauso gut auf ein array, was bedeutet, dass Sie nicht brauchen, die foreach-object-Schleife an alle:
InformationsquelleAutor mjolinor
Du bist nicht die änderung der variable$_.
Können Sie versuchen:
Ich habe auch versucht nicht mit regex, aber die festen string und es funktioniert. Wie unten (Get-Content "test1.xml") | ForEach-Object {$_ -replace "name-1a2b3c4d', "Namen-6a5e4r3h"} | Set-Content "test2.xml"
Der erste parameter für
-replace
ist immer eine regex. Wenn Sie'name-1a2b3c4d'
Sie sind omiting die^
(am Anfang der Zeile) und die$
(am Ende der Zeile). Vielleicht in der original-Dateiname-1a2b3c4d
passt nicht^
.InformationsquelleAutor E.V.I.L.