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 commandeGet-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 ;-)