Utiliser powershell ForEach-Object de match et de le remplacer chaîne avec la regex
Je utiliser le dessous de pipeline pour lire un fichier et de le remplacer une ligne et l'enregistrer dans un autre fichier, mais a constaté que la chaîne de caractères dans le fichier cible n'est pas remplacé, c'est toujours l'ancien.
ligne d'origine est : nom-1a2b3c4d
nouvelle ligne devrait être: nom-6a5e4r3h
(Get-Content "test1.xml") | ForEach-Object {$_ -replace '^name-.*$', "name-6a5e4r3h"} | Set-Content "test2.xml"
Quelque chose qui manque?
Votre code fonctionne parfaitement sur PS2.0 et PS3.0
Avez-vous essayé d'utiliser d'analyse XML? Ne sais pas si c'est applicable, mais si vous savez dans quel élément de l'XML, vous devez remplacer votre chaîne, qui peut être plus "propre"
Avez-vous essayé d'utiliser d'analyse XML? Ne sais pas si c'est applicable, mais si vous savez dans quel élément de l'XML, vous devez remplacer votre chaîne, qui peut être plus "propre"
OriginalL'auteur user1201530 | 2013-03-08
Vous devez vous connecter pour publier un commentaire.
Une chose vous manque, c'est que l'-remplacer l'opérateur fonctionne très bien sur un tableau, ce qui signifie que vous n'avez pas besoin que foreach-object boucle à tous:
OriginalL'auteur mjolinor
Vous n'êtes pas la modification de la variable$_.
Vous pourriez essayer:
J'ai aussi essayé de ne pas en utilisant les regex, mais la chaîne fixe, et cela fonctionne. Comme ci-dessous (Get-Content "test1.xml") | ForEach-Object {$_ -remplacer "nom-1a2b3c4d', "nom-6a5e4r3h"} | Set-Content "test2.xml"
Le premier paramètre de
-replace
est toujours une regex. Lorsque vous utilisez'name-1a2b3c4d'
vous êtes omettre l'^
(au début de la ligne) et la$
(à la fin de la ligne). Peut-être dans votre fichier d'originename-1a2b3c4d
ne correspond pas^
.OriginalL'auteur E.V.I.L.