Comment remplacer un texte dans un fichier en utilisant PowerShell

  1. Utiliser Get-Content et Set-Content pour remplacer chaque occurrence d’une chaîne dans un fichier avec PowerShell
  2. Utiliser la classe File pour remplacer chaque occurrence d’une chaîne dans un fichier avec PowerShell
  3. Remplacer chaque occurrence d’une chaîne dans plusieurs fichiers avec PowerShell
  4. Conclusion
Comment remplacer un texte dans un fichier en utilisant PowerShell

PowerShell est un outil puissant pour gérer les fichiers et les dossiers. Il vous permet de créer, copier, supprimer, déplacer, renommer et visualiser des fichiers et des dossiers sur le système.

Ce tutoriel introduira différentes méthodes pour remplacer chaque occurrence de chaîne dans un fichier avec PowerShell.

Utiliser Get-Content et Set-Content pour remplacer chaque occurrence d’une chaîne dans un fichier avec PowerShell

La commande 'Get-Content' récupère le contenu d’un élément dans le chemin fourni, comme le texte dans un fichier. Le cmdlet 'Set-Content' est un outil de traitement de chaîne qui vous permet d’ajouter un nouveau contenu à un fichier ou de remplacer un contenu existant.

Vous pouvez utiliser le cmdlet Get-Content et Set-Content pour remplacer chaque occurrence de chaîne dans un fichier.

Syntaxe :

(Get-Content -Path 'Path\to\Your\File.txt') -Replace 'OldString', 'NewString' | Set-Content -Path 'Path\to\Your\File.txt'

Dans la syntaxe, nous remplaçons 'OldString' par la chaîne que nous souhaitons remplacer et 'NewString' par la chaîne que nous voulons mettre à sa place. Assurez-vous de remplacer 'Path\to\Your\File.txt' par le chemin réel de votre fichier.

Prenons un exemple. Nous avons un fichier texte (test.txt) dans le répertoire (C:\New) avec le contenu suivant.

Get-Content C:\New\test.txt

Sortie :

Welcome to Linux tutorials.
Linux is free.
Linux is powerful.

Maintenant, remplaçons chaque occurrence de la chaîne 'Linux' par 'PowerShell' dans un fichier test.txt avec l’aide du paramètre -Replace. Les parenthèses () sont nécessaires autour de Get-Content.

(Get-Content C:\New\test.txt) -Replace 'Linux', 'PowerShell' | Set-Content C:\New\test.txt

Ensuite, visualisez le contenu d’un fichier test.txt pour vérifier les modifications.

Get-Content C:\New\test.txt

Comme vous pouvez le voir, Linux a été remplacé avec succès par PowerShell.

Sortie :

Welcome to PowerShell tutorials.
PowerShell is free.
PowerShell is powerful.

Cette méthode utilise un tableau de chaînes pour trouver et remplacer des chaînes dans un fichier parce que le cmdlet Get-Content retourne un tableau. Il est plus facile de remplacer des chaînes si le Get-Content retourne une seule chaîne.

Nous pouvons utiliser le paramètre -Raw comme montré ci-dessous. Le paramètre -Raw est utilisé pour s’assurer que le contenu de 'C:\New\test.txt' est lu comme une seule chaîne, permettant un remplacement efficace de 'Linux' par 'PowerShell' dans tout le fichier.

(Get-Content C:\New\test.txt -Raw) -Replace 'Linux', 'PowerShell' | Set-Content C:\New\test.txt

Dans ce code, nous lisons le contenu d’un fichier situé à 'C:\New\test.txt' comme une seule chaîne. Ensuite, nous utilisons l’opérateur -Replace pour trouver et remplacer toutes les occurrences de 'Linux' par 'PowerShell' dans cette chaîne.

Enfin, nous sauvegardons le contenu modifié dans le même fichier, le mettant à jour avec le nouveau texte. Ce code est une manière simple d’effectuer des remplacements de texte dans un fichier en utilisant PowerShell.

Utiliser la classe File pour remplacer chaque occurrence d’une chaîne dans un fichier avec PowerShell

La classe File fournit des méthodes statiques pour des opérations courantes telles que créer, copier, déplacer, ouvrir, supprimer et ajouter à un seul fichier. Utilisez la méthode Replace() de la classe File pour remplacer le contenu d’un fichier spécifié.

Syntaxe :

$string = [System.IO.File]::ReadAllText("FilePath")
$string = $string.Replace("OldString", "NewString")
[System.IO.File]::WriteAllText("FilePath", $string)

Paramètres :

  • "FilePath" : Cela doit être remplacé par le chemin réel du fichier.
  • "OldString" : C’est la chaîne que vous voulez remplacer.
  • "NewString" : C’est la chaîne par laquelle vous voulez le remplacer.

La méthode ReadAllText() ouvre un fichier texte, lit tout le texte dans ce fichier, puis ferme le fichier.

La méthode WriteAllText() crée un nouveau fichier, écrit la chaîne spécifique dans le fichier et ferme le fichier. Il est écrasé si le fichier cible existe déjà à l’emplacement.

Prenons un exemple. Nous avons un fichier texte (python.txt) dans le répertoire (C:\New) avec le contenu suivant.

Get-Content C:\New\python.txt

Sortie :

Find the best Python tutorials and learn Python easily from DelftStack.

Maintenant, remplaçons chaque occurrence d’une chaîne dans un fichier en utilisant la méthode de la classe File.

$string = [System.IO.File]::ReadAllText("C:\New\python.txt").Replace("Python", "JavaScript")
[System.IO.File]::WriteAllText("C:\New\python.txt", $string)

Dans le code ci-dessus, nous commençons par créer une variable appelée $string, qui stockera le contenu modifié du fichier 'C:\New\python.txt' après avoir effectué le remplacement de texte. En utilisant [System.IO.File]::ReadAllText("C:\New\python.txt"), nous lisons tout le contenu du fichier et le sauvegardons dans $string.

Dans l’étape suivante, nous utilisons la méthode Replace() pour localiser toutes les instances de "Python" dans le contenu et les remplacer par "JavaScript", mettant ainsi à jour le texte. Enfin, nous utilisons [System.IO.File]::WriteAllText("C:\New\python.txt", $string) pour écrire le contenu modifié dans le même fichier, écrasant le texte original et préservant nos changements.

Vérifiez les modifications apportées dans C:\New\python.txt.

Get-Content C:\New\python.txt

Sortie :

Find the best JavaScript tutorials and learn JavaScript easily from DelftStack.

Dans la sortie, nous pouvons voir que "Python" a été remplacé par le mot "JavaScript".

Remplacer chaque occurrence d’une chaîne dans plusieurs fichiers avec PowerShell

Les méthodes ci-dessus remplacent une chaîne dans un seul fichier. Parfois, vous pourriez avoir besoin de remplacer la même chaîne dans plusieurs fichiers.

Dans ce cas, vous pouvez utiliser la commande ci-dessous pour remplacer chaque occurrence d’une chaîne spécifiée dans plusieurs fichiers.

Get-ChildItem 'C:\New\*.txt' | foreach {
     (Get-Content $_) | foreach { $_ -Replace 'weekly', 'monthly' } | Set-Content $_
}

Dans le code ci-dessus, nous commençons par utiliser Get-ChildItem pour collecter une liste de fichiers '.txt' dans le répertoire 'C:\New'. Le caractère générique * spécifie tous les fichiers avec l’extension de nom de fichier .txt.

Nous parcourons ensuite chaque fichier, lisons son contenu avec Get-Content et appliquons une opération de remplacement, changeant 'weekly' en 'monthly', à l’aide de l’opérateur -Replace. Le contenu modifié est ensuite écrit dans le même fichier avec Set-Content.

Ce processus se répète pour chaque fichier du répertoire, remplaçant efficacement 'weekly' par 'monthly' dans plusieurs fichiers.

Nous pouvons également utiliser le paramètre -Recurse pour remplacer une chaîne dans les fichiers du répertoire spécifié et de ses sous-répertoires.

Get-ChildItem 'C:\New\*.txt' -Recurse | foreach {
     (Get-Content $_) | foreach { $_ -Replace 'weekly', 'monthly' } | Set-Content $_
}

Dans ce code, nous commençons par utiliser Get-ChildItem pour assembler une liste de fichiers '.txt' dans 'C:\New' et ses sous-répertoires. L’option -Recurse garantit que nous recherchons ces fichiers non seulement dans le répertoire spécifié mais aussi dans ses sous-répertoires.

Nous utilisons ensuite une paire de boucles ForEach pour accéder au contenu de chaque fichier. Dans la boucle intérieure, nous utilisons l’opérateur -Replace pour substituer 'weekly' par 'monthly' dans le texte.

Enfin, nous sauvegardons le contenu ajusté dans le même fichier. Ce processus s’exécute à travers tous les fichiers dans 'C:\New' et ses sous-dossiers, nous permettant de remplacer efficacement 'weekly' par 'monthly' à travers de nombreux fichiers et répertoires imbriqués.

Conclusion

Dans cet article, nous avons examiné différentes manières de remplacer des chaînes dans un seul fichier en utilisant les cmdlets Get-Content et Set-Content, offrant à la fois une méthode basique et une méthode plus efficace avec le paramètre -Raw. Ensuite, nous avons exploité la puissance de la classe File pour remplacer du texte dans des fichiers, démontrant une technique plus avancée.

En outre, nous avons élargi nos connaissances en remplaçant du texte dans plusieurs fichiers dans un répertoire et ses sous-répertoires. Ces méthodes facilitent l’édition de texte dans vos fichiers et montrent à quel point PowerShell peut être utile pour des tâches comme celle-ci.

Vous aimez nos tutoriels ? Abonnez-vous à DelftStack sur YouTube pour nous aider à créer davantage de tutoriels vidéo de haute qualité. Abonnez-vous
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

Article connexe - PowerShell String