Tym-Project

From: SUPINFO
To: Tous
Subject: IT

Adaptation De "Sed" en PowerShell (Windows)

PowerShell est un langage de script développé par Microsoft, le #!/bin/bash de Windows en quelque sorte. Ce langage propose de très nombreuses fonctionnalités, et après un petit temps d’adaptation, devient assez simple à utiliser. Mais parfois ce n’est pas aussi évident, comme par exemple avec la mise en place de l’équivalent d’un [man]sed[/man].

La solution

Une rapide recherche m’a amené sur cet article qui propose cette solution :

cat input.txt | %{$_ -replace "old", "new"} > output.txt

Une petite explication s’impose :

  • cat est en PowerShell un alias de la commande Get-Content
  • $_ représente le contenu sortant du pipe
  • > est une classique redirection de la sortie standard
  • les { } délimitent les commandes à effectuer sur la sortie du pipe
  • le % signifie “itérer sur la sortie du pipe”

En apparence cela fonctionne très bien…en apparence seulement…

La bonne solution

J’ai appliqué la solution précédente sur un fichier Xml servant à la configuration d’une Webapp dans Tomcat. Dès l’instant où je plaçait ce fichier dans l’arborescence, j’obtenais une magnifique erreur 500. Après quelques tests il s’est avéré que c’est la redirection, >, qui pose problème d’une manière ou d’une autre et qui rend le fichier lisible, mais en fait non… Au final j’ai testé cette combinaison, qui fonctionne correctement :

Get-Content input.txt | %{$_ -replace "old", "new"} | Set-Content output.txt

L’utilisation de Set-Content donne donc un fichier tout à fait viable.

Bon PoSh ;-)

Comments