PowerShell et Split : découper une chaîne de caractères
Sommaire
I. Présentation
Dans ce tutoriel, je vais vous apprendre à utiliser la méthode Split() en PowerShell. Une méthode indispensable pour découper une chaîne de caractères.
La chaîne de caractères envoyée en entrée et découpée avec Split() permettra d'obtenir un tableau de chaînes de caractères : string[]. Le délimiteur utilisé par Split() peut être un caractère unique, une chaîne, mais aussi un pattern.
💡 Apprenez à utiliser la méthode Substring() de PowerShell
II. PowerShell - Split() : obtenir un tableau à partir d'une chaîne
A. Exemples basiques Split() PowerShell
Je vais rapidement vous faire comprendre l'intérêt de la méthode Split(). Déclarons une variable sous la forme d'une adresse e-mail :
$Email = "[email protected]"
Maintenant, essayons d'obtenir l'identifiant de l'utilisateur d'une part (prenom.nom) et le domaine de l'autre (it-connect.fr). Ce qu'il y a entre deux, et c'est commun à toutes les adresses e-mails, c'est le "@" : ce sera le caractère que l'on va utiliser avec Split().
On va donc exécuter :
$Email.Split("@")
Mais l'on pourrait aussi utiliser l'écriture ci-dessous :
$Email -Split("@")
En retour, on obtient :
prenom.nom it-connect.fr
En fait, la méthode Split() retourne un tableau de valeur. Du coup la valeur "prenom.nom" correspond à l'index [0] tandis que la valeur "it-connect.fr" correspond à l'index [1].
Exécutez les commandes ci-dessous, vous verrez par vous-même :
$EmailSplit = $Email -Split("@") $EmailSplit.GetType() $EmailSplit[0] $EmailSplit[1]
En image directement :
Nous avons utilisé le caractère "@" comme séparateur, mais on aurait pu prendre un mot complet ou un autre caractère. Par exemple, on pourrait découper une adresse IP en se basant sur le point comme caractère pour spliter (diviser) notre chaîne :
$IPAddress = "192.168.1.1" ($IPAddress).split(".")
Il faut savoir que l'on peut récupérer facilement une valeur de notre tableau. Par exemple pour affecter la première valeur à une variable :
$IPPremierOctet = ($IPAddress).split(".")[0]
De la même façon, et c'est bien utile lorsque l'on le connaît pas à l'avance combien de blocs on va obtenir, on peut récupérer la dernière valeur avec l'index -1 (classique avec PowerShell) :
$IPDernierOctet = ($IPAddress).split(".")[-1]
Cela fonctionne aussi très bien avec l'espace comme caractère de référence :
$Phrase = "Bienvenue sur le site IT-Connect !" ($Phrase).Split(" ")
B. Split() et Max-substrings
La méthode Split() supporte plusieurs paramètres, et pas seulement le délimiteur. On peut également lui indiquer le nombre de morceaux à retourner, c'est-à-dire le nombre de sous-chaînes à générer. Reprenons notre phrase précédente avec la variable $Phrase : on va la découper en deux seulement.
$Phrase = "Bienvenue sur le site IT-Connect !"
($Phrase).Split(" ",2)
La méthode va s'arrêter après le premier espace pour séparer en deux la chaîne. Ce qui va donner deux chaînes distinctes :
Bienvenue sur le site IT-Connect !
On peut aussi écrire :
$Phrase -Split " ",2
C. Split() et ScriptBlock
La méthode Split() supporte également un bloc de script comme entrée pour séparer la chaîne. En fait, c'est particulièrement utile pour spécifier deux délimiteurs différents.
Prenons une URL comme valeur de référence :
$URL = "https://www.it-connect.fr"
Maintenant, on va séparer cette chaîne de caractères en prenant deux caractères : ":" ou ".", ce qui donne :
$URL -split { $_ -eq ":" -or $_ -eq "." }
Voilà, nous venons de voir comment utiliser la méthode Split() avec PowerShell, une manière simple, mais redoutable pour diviser une chaîne de caractères en plusieurs sous-chaînes.
Petit complément concernant les index avec la méthode Split :
Si on ne sait pas à l’avance combien d’entrées on va obtenir après un Split, on peut obtenir la dernière en utilisant l’index [-1], par exemple :
$IPPremierOctet = ($IPAddress).split(« . »)[-1]
L’index [-2] nous donne l’avant-dernière entrée, et ainsi de suite
Bonne remarque Thibault. J’ai mis à jour l’article 😉
Bonjour,
Votre tuto semble avoir été copié sur ce site.
summarynetworks.com/info-tlc/powershell-et-split-decouper-une-chaine-de-caracteres-powershell/
PS:
Étant dans le domaine de l’informatique, j’en profite pour vous remercier vous et votre site qui aide beaucoup d’entre nous à progresser.
Cordialement,
Anthony
Cordialement,
Bonjour Anthony,
Effectivement… Merci pour l’info 🙂 !
Bonne soirée
Florian
A noter que .Split et -Split n’ont pas tout le temps le même comportement (avec le . [dot] par exemple).
.Split vient de .NET
-Split est la méthode PowerShell
(« 192.168.1.1 »).Split(« . ») retourne le résultat attendu
(« 192.168.1.1 ») -Split « . » ne retourne rien
(« 192.168.1.1 ») -Split(« \. ») retourne le résultat attendu (fonctionne comme un regex)
Je conseille de ne pas mélanger les deux méthodes dans vos scripts.
Excellent site au demeurant, bonne continuation.
Sulian
Bonjour et Merci pour votre excellent site
J’essaie de couper une chaine de caractère sur une chaine de caractères définis.
Par exemple, couper la chaine « it-connect.fr » sur « nn »
avec « it-co » et « ect.fr » en retour
Je ne réussi pas à le faire avec la coommande Split () ou Substring()
Une idée ?
Merci
Bonne journée
Eric
Bonjour Eric,
Dans ce cas, il faudrait plutôt utiliser la méthode Split() pour découper la chaine de caractères en ciblant « nn » : ce qui va créer un tableau de valeurs et supprimer « nn ».
Par exemple :
("it-connect.fr").Split("nn")
Ceci retournera bien « it-co » et « ect.fr ».