J'ai un simple fichier texte et j'ai besoin d'un script PowerShell pour remplacer certaines parties du contenu du fichier.
Mon script actuel est le suivant:
$content = Get-Content -path "Input.json"
$content -Replace '"(\d+),(\d{1,})"', '$1.$2' | Out-File "output.json"
Est-il possible de l'écrire sur une seule ligne sans la variable de contenu, comme ceci?
Get-Content -path "Input.json" | ??? -Replace '"(\d+),(\d{1,})"', '$1.$2' | Out-File "output.json"
Je ne sais pas comment utiliser la sortie de la première commande get-content dans la deuxième commande sans la variable $ content? Existe-t-il une variable PowerShell automatique
Est-il possible de faire plus de remplacements qu'un dans un pipeline.
Get-Content -path "Input.json" | ??? -Replace '"(\d+),(\d{1,})"', '$1.$2' | ??? -Replace 'second regex', 'second replacement' | Out-File "output.json"
Oui, vous pouvez le faire sur une seule ligne et n'avez même pas besoin d'un pipeline, comme -replace
fonctionne sur des tableaux comme vous vous y attendez (et vous pouvez chaîner l'opérateur):
(Get-Content Input.json) `
-replace '"(\d+),(\d{1,})"', '$1.$2' `
-replace 'second regex', 'second replacement' |
Out-File output.json
(Des sauts de ligne ont été ajoutés pour plus de lisibilité.)
Les parenthèses autour du Get-Content
un appel est nécessaire pour empêcher le -replace
opérateur étant interprété comme un argument pour Get-Content
.
Est-il possible de l'écrire sur une seule ligne sans la variable de contenu, comme ceci?
Oui: utilisez ForEach-Object
(ou son alias %
) puis $_
pour référencer l'objet sur le pipeline:
Get-Content -path "Input.json" | % { $_ -Replace '"(\d+),(\d{1,})"', '$1.$2' } | Out-File "output.json"
Est-il possible de faire plus de remplacements qu'un dans un pipeline.
Oui.
Foreach-Object
segments.Comme -replace
renvoie le résultat, ils peuvent être chaînés en une seule expression:
($_ -replace $a,$b) -replace $c,$d
Je soupçonne que les parenthèses ne sont pas nécessaires, mais je pense qu'elles facilitent la lecture: clairement plus de quelques opérateurs chaînés (surtout si la correspondance/les remplacements ne sont pas triviaux) ne seront pas clairs.