Tous les méthodes de remplacement dans PowerShell
-
Introduction à la méthode
replace()
dans PowerShell -
Utiliser la méthode
replace()
dans PowerShell - Suppression de caractères dans PowerShell
- Remplacement de plusieurs instances dans PowerShell
- Utiliser l’opérateur de remplacement dans PowerShell
- Suppression de caractères dans PowerShell
- Remplacement de plusieurs instances dans PowerShell
- Remplacement de chaînes en utilisant Regex dans PowerShell
- Échappement des caractères Regex dans PowerShell

Windows PowerShell peut travailler avec des textes et des chaînes comme beaucoup d’autres langages. L’une de ces fonctionnalités précieuses est d’utiliser Windows PowerShell pour remplacer des caractères, des chaînes ou même du texte à l’intérieur de fichiers.
Cet article discutera du remplacement ou de la suppression de caractères, de textes et de mots en utilisant différentes méthodes de remplacement de PowerShell.
Introduction à la méthode replace()
dans PowerShell
Nous pouvons utiliser Windows PowerShell pour remplacer des caractères dans des chaînes. Par exemple, créons une variable PowerShell avec un type de données chaîne que nous utiliserons tout au long de cet article.
$string = 'hello, world'
Nous voulons remplacer le mot hello
à l’intérieur de la chaîne par le mot hi
pour que la variable $string
ait une valeur de hi, world
.
Pour exécuter cela, Windows PowerShell doit déterminer où trouver la partie spécifique du texte, et une fois qu’elle est trouvée, elle remplace cette portion du texte par une valeur fournie par l’utilisateur.
Utiliser la méthode replace()
dans PowerShell
L’un des moyens les plus pratiques de remplacer des chaînes dans Windows PowerShell est d’utiliser la méthode replace()
. La méthode replace()
accepte deux arguments.
- La chaîne à trouver.
- La chaîne pour remplacer le texte trouvé.
Comme nous pouvons le voir ci-dessous, Windows PowerShell localise le mot hello
et le remplace par la chaîne hi
. La méthode renvoie le résultat final, hi, world
.
Utilisons notre variable $string
précédemment créée comme exemple.
Code :
$string.replace('hello', 'hi')
Sortie :
hi, world
Nous pouvons invoquer la méthode replace()
sur n’importe quel caractère pour remplacer n’importe quelle chaîne littérale par une autre. La méthode replace()
ne renvoie rien si la chaîne à remplacer n’est pas trouvée.
De plus, nous n’avons pas besoin d’assigner une chaîne à une variable pour remplacer du texte dans une chaîne. Au lieu de cela, nous pouvons appeler directement la méthode replace()
sur la chaîne.
Code :
'hello world'.replace('hello', 'hi')
Suppression de caractères dans PowerShell
Peut-être avons-nous besoin de supprimer des caractères d’un texte par rapport à une autre chaîne plutôt que de les remplacer par autre chose. Nous pouvons également faire cela en spécifiant une chaîne vide.
Code :
$string.replace('hello', '')
Sortie :
, world
Remplacement de plusieurs instances dans PowerShell
Puisque la méthode replace()
renvoie une valeur avec un type de données chaîne, pour remplacer une autre instance, nous pouvons connecter et ajouter un autre appel de méthode replace()
à la fin. Windows PowerShell invoque ensuite la méthode replace()
sur la sortie réelle.
Code :
$string.replace('hello', '').replace('world', 'earth')
Sortie :
, earth
Nous pouvons enchaîner autant d’appels à la méthode replace()
que nécessaire, mais nous devrions envisager d’utiliser l’opérateur de remplacement si nous avons plusieurs chaînes à remplacer.
Utiliser l’opérateur de remplacement dans PowerShell
Nous pouvons également utiliser l’opérateur de remplacement de Windows PowerShell pour remplacer un texte. L’opérateur de remplacement est similaire à la méthode où nous fournissons une chaîne à trouver et à remplacer.
Mais, il a un avantage significatif : l’utilisation d’expressions régulières (regex) pour trouver des chaînes correspondantes. En utilisant l’exemple précédent, nous pouvons utiliser l’opérateur de remplacement pour remplacer hello
par hi
de manière similaire, comme montré ci-dessous.
Code :
$string -replace 'hello', 'hi'
Sortie :
hi, world
Suppression de caractères dans PowerShell
Comme la méthode replace()
, nous pouvons également supprimer des caractères d’une chaîne en utilisant l’opérateur de remplacement. Contrairement à la méthode replace()
, nous pouvons également totalement exclure la chaîne comme argument à remplacer, et vous découvrirez le même effet.
Code :
$string -replace 'hello', ''
$string -replace 'hello'
Sortie :
, world
, world
Remplacement de plusieurs instances dans PowerShell
Nous pouvons également enchaîner les utilisations de l’opérateur de remplacement.
Code :
$string -replace 'hello', 'hi' -replace 'world', 'earth'
Sortie :
hi, earth
Remplacement de chaînes en utilisant Regex dans PowerShell
Remplacer des chaînes dans PowerShell avec replace()
est limité. Nous sommes contraints d’utiliser uniquement des chaînes littérales.
Nous ne pouvons pas utiliser des jokers ou des regex. Si vous effectuez des tâches intermédiaires ou avancées, nous devrions utiliser l’opérateur de remplacement.
Nous avons un script contenant une chaîne créée avec une variable. Nous voulons changer la chaîne en goodbye, world
indépendamment de la valeur.
Il aiderait à transformer hello, world
et hi, world
en goodbye, world
. Nous devons utiliser une expression régulière et faire correspondre à peu près n’importe quel motif spécifique dans le texte avec regex pour que cela se produise.
Dans cet exemple, nous pouvons utiliser l’expression hello|hi
pour faire correspondre les deux chaînes requises en utilisant l’opérateur “ou” regex ou le caractère pipe (|
).
Code :
'hello, world' -replace 'hello|hi', 'goodbye'
'hi, world' -replace 'hello|hi', 'goodbye'
Sortie :
goodbye, world
goodbye, world
Une fois que nous avons appris à utiliser regex pour trouver des chaînes, nous pouvons utiliser PowerShell pour remplacer des chaînes joker qui correspondent à n’importe quel motif.
Échappement des caractères Regex dans PowerShell
Dans l’exemple regex ci-dessus, la chaîne à rechercher ne contenait aucun caractère regex spécial. Cependant, le langage des expressions régulières a certains caractères qu’il utilise qui ne sont pas interprétés littéralement comme la plupart des lettres et des chiffres.
Par exemple, peut-être que nous devons remplacer du texte dans une chaîne. Cette chaîne contient quelques caractères regex spéciaux comme une parenthèse et un point d’interrogation.
Nous essayons alors de remplacer la chaîne [hello]
par un goodbye
.
Code :
PS> '[hello], world' -replace '[hello]', 'goodbye'
Sortie :
[goodbyegoodbyegoodbyegoodbyegoodbye], wgoodbyergoodbyed
Ce n’est pas ce que nous avions l’intention de faire. Ce scénario se produit lorsque nous utilisons des caractères regex spéciaux à l’intérieur de la chaîne à trouver ([hello]
).
Pour éviter ce problème, nous pouvons soit échapper ces caractères spéciaux en ajoutant un antislash devant chaque caractère, soit utiliser la méthode Escape()
. Ci-dessous, nous pouvons voir l’effet d’échapper chaque caractère spécial avec un antislash.
Code :
'[hello], world' -replace '\[hello\]', 'goodbye'
Sortie :
goodbye, world
Alternativement, nous pouvons utiliser la méthode Escape()
du type regex pour supprimer automatiquement tous les caractères spéciaux.
Code :
'[hello], world' -replace ([regex]::Escape('[hello]')), 'goodbye'
Sortie :
goodbye, world
Nous devrions utiliser la méthode Escape()
car elle échappera tous les caractères spéciaux, et nous n’avons pas à les mémoriser.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn