Remplacer le contenu d'un fichier texte par un regex dans powershell
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,})"', '.' | Out-File "output.json"
est-il possible de l'écrire en une seule ligne sans la variable content, comme ceci?
Get-Content -path "Input.json" | ??? -Replace '"(d+),(d{1,})"', '.' | Out-File "output.json"
Je ne sais pas comment je peux utiliser la sortie du premier commandlet get-content dans la deuxième commande sans la variable $content? Y a-t-il une variable powershell automatique
est-ce possible? faire plusieurs remplacements dans un pipeline.
Get-Content -path "Input.json" | ??? -Replace '"(d+),(d{1,})"', '.' | ??? -Replace 'second regex', 'second replacement' | Out-File "output.json"
2 réponses
Oui, vous pouvez le faire en une seule ligne et de ne même pas besoin d'un pipeline, comme -replace
fonctionne sur des tableaux comme vous vous attendez à ce qu'il fasse (et vous pouvez enchaîner l'opérateur):
(Get-Content Input.json) `
-replace '"(\d+),(\d{1,})"', '.' `
-replace 'second regex', 'second replacement' |
Out-File output.json
(les sauts de ligne sont ajoutés pour plus de lisibilité.)
les parenthèses autour du Get-Content
les appels sont nécessaires pour empêcher le -replace
l'opérateur étant interprété comme un argument à Get-Content
.
est-il possible de l'écrire en une seule ligne sans la variable content, comme ceci?
Oui: utiliser ForEach-Object
(ou son alias %
) et $_
pour faire référence à l'objet sur le pipeline:
Get-Content -path "Input.json" | % { $_ -Replace '"(\d+),(\d{1,})"', '.' } | Out-File "output.json"
Est-il possible d'effectuer plusieurs remplacements dans un pipeline.
Oui.
- comme ci-dessus: il suffit d'ajouter plus
Foreach-Object
segments. -replace
renvoie le résultat, ils peut être enchaîné dans 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'ils sont plus faciles à lire: clairement plus de quelques opérateurs enchaînés (surtout si le match / remplacements ne sont pas anodins) ne pas être clair.