GNU/Linux >> Tutoriels Linux >  >> Linux

Comment diviser une chaîne dans un script bash

Disons que vous avez une longue chaîne avec plusieurs mots séparés par une virgule ou un trait de soulignement. Vous souhaitez diviser cette chaîne et extraire les mots individuels.

Vous pouvez diviser les chaînes en bash à l'aide du séparateur de champs interne (IFS) et de la commande de lecture ou vous pouvez utiliser la commande tr. Laissez-moi vous montrer comment faire cela avec des exemples.

Méthode 1 :Fractionner une chaîne à l'aide de la commande de lecture dans Bash

Voici mon exemple de script pour diviser la chaîne à l'aide de la commande read :

#!/bin/bash
#
# Script to split a string based on the delimiter

my_string="Ubuntu;Linux Mint;Debian;Arch;Fedora"
IFS=';' read -ra my_array <<< "$my_string"

#Print the split string
for i in "${my_array[@]}"
do
    echo $i
done

La partie qui divise la chaîne est ici :

IFS=';' read -ra my_array <<< "$my_string"

Laissez-moi vous l'expliquer. IFS détermine le délimiteur sur lequel vous souhaitez diviser la chaîne. Dans mon cas, c'est un point-virgule. Cela peut être tout ce que vous voulez comme un espace, une tabulation, une virgule ou même une lettre.

L'IFS dans la commande de lecture divise l'entrée au niveau du délimiteur. La commande de lecture lit l'entrée brute (option -r) et interprète donc littéralement les barres obliques inverses au lieu de les traiter comme des caractères d'échappement. L'option -a avec la commande read stocke le mot lu dans un tableau en bash.

En termes plus simples, la longue chaîne est divisée en plusieurs mots séparés par le délimiteur et ces mots sont stockés dans un tableau.

Vous pouvez maintenant accéder au tableau pour obtenir le mot que vous désirez ou utiliser la boucle for dans bash pour imprimer tous les mots un par un comme je l'ai fait dans le script ci-dessus.

Voici la sortie du script ci-dessus :

Ubuntu
Linux Mint
Debian
Arch
Fedora

Méthode 2 :Fractionner une chaîne à l'aide de la commande tr dans Bash

Voici l'exemple de chaîne scindée bash utilisant la commande tr (traduire) :

#!/bin/bash
#
# Script to split a string based on the delimiter

my_string="Ubuntu;Linux Mint;Debian;Arch;Fedora"  
my_array=($(echo $my_string | tr ";" "\n"))

#Print the split string
for i in "${my_array[@]}"
do
    echo $i
done

Cet exemple est à peu près le même que le précédent. Au lieu de la commande de lecture, la commande tr est utilisée pour diviser la chaîne sur le délimiteur.

Le problème avec cette approche est que les éléments du tableau sont divisés sur le "délimiteur d'espace". Pour cette raison, des éléments comme "Linux Mint" seront traités comme deux mots.

Voici la sortie du script ci-dessus :

Ubuntu
Linux
Mint
Debian
Arch
Fedora

C'est la raison pour laquelle je préfère la première méthode pour diviser la chaîne en bash.

J'espère que ce tutoriel bash rapide vous a aidé à diviser la chaîne. Dans un article connexe, vous voudrez peut-être également en savoir plus sur la comparaison de chaînes dans bash.

Et si vous êtes absolument nouveau sur Bash, lisez notre série de tutoriels pour débutants sur Bash.


Linux
  1. Comment déboguer un script bash ?

  2. Comment appeler une fonction Bash dans le script Bash à l'intérieur d'Awk ?

  3. Comment lire une chaîne en tant que numéro hexadécimal dans Bash ?

  4. Comment trouver la longueur d'une chaîne dans Bash [Astuce rapide]

  5. Comment vérifier si la chaîne contient une sous-chaîne dans Bash

Comment exécuter un script bash {7 méthodes}

Comment écrire un script bash avec des exemples

Comment vérifier si une chaîne contient une sous-chaîne dans Bash

Comment exécuter un script bash

Comment vérifier la syntaxe d'un script Bash sans l'exécuter ?

Comment exécuter un script bash ?