23/11/2024

PowerShell

PowerShell et Split : découper une chaîne de caractères

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 :

PowerShell Split() - Exemple

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.

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

7 commentaires sur “PowerShell et Split : découper une chaîne de caractères

  • 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

    Répondre
  • 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,

    Répondre
  • 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

    Répondre
  • 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

    Répondre
    • 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 ».

      Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.