PowerShell:
Modification de fichiers sur place avec des lignes de commande en une seule étape
Comment faire :
Remplacer du texte dans un fichier unique
Commençons par une tâche simple : vous voulez remplacer toutes les instances de “oldtext” par “newtext” dans un fichier nommé example.txt. Voici comment vous pouvez le faire :
(Get-Content example.txt) -replace 'oldtext', 'newtext' | Set-Content example.txt
Cette ligne de commande lit le contenu, effectue le remplacement et réécrit le contenu dans le fichier original.
Éditer plusieurs fichiers
Que faire si vous avez besoin d’appliquer le même changement à plusieurs fichiers ? Voici une approche utilisant une boucle :
Get-ChildItem *.txt | ForEach-Object {
(Get-Content $_) -replace 'oldtext', 'newtext' | Set-Content $_
}
Ce bout de code trouve tous les fichiers .txt
dans le répertoire courant, en remplaçant “oldtext” par “newtext” dans chacun d’eux.
Ajouter du contenu au début ou à la fin des fichiers
Ajouter ou préfixer du contenu peut également être simplifié :
# Préfixer
"New first line`n" + (Get-Content example.txt) | Set-Content example.txt
# Ajouter à la fin
(Get-Content example.txt) + "`nNew last line" | Set-Content example.txt
Ici, nous concaténons simplement le nouveau contenu avant ou après le contenu existant et le sauvegardons.
Plongée profonde
Historiquement, l’édition directe dans les fichiers est plus généralement associée à des outils Unix tels que sed
et awk
. PowerShell, étant un nouvel arrivant, n’inclut pas de fonctionnalité d’édition directe en soi. Cela est en partie dû à sa philosophie de conception, soulignant l’importance des objets par rapport aux flux de texte, contrairement aux outils Unix qui traitent la plupart des entrées comme du texte.
Les alternatives à PowerShell pour cette tâche incluent l’utilisation d’outils Unix traditionnels disponibles sur Windows via Cygwin ou le sous-système Windows pour Linux (WSL). Ces outils offrent souvent une syntaxe plus concise pour l’édition directe en raison de leur conception centrée sur le texte.
Concernant la mise en œuvre, il est important de noter que l’approche de PowerShell implique de lire le fichier entier en mémoire, de faire des modifications, puis de l’écrire à nouveau. Bien que cela fonctionne bien pour des fichiers de taille modérée, cela peut devenir inefficace pour des fichiers très volumineux. Dans de tels cas, on pourrait envisager d’utiliser directement les méthodes .NET
ou de recourir à d’autres outils conçus pour le streaming de grandes quantités de données.
Malgré ces considérations, la flexibilité de PowerShell et son ensemble de fonctionnalités étendues en font un outil inestimable pour manipuler des fichiers directement depuis la ligne de commande, en particulier pour ceux déjà ancrés dans l’écosystème Windows ou gérant des environnements multiplateformes.