logo

Script Bash – Chaîne divisée

Dans cet article, nous verrons comment diviser des chaînes dans un script bash.

La division d'une seule chaîne en plusieurs chaînes est appelée division de chaîne. De nombreux langages de programmation ont une fonction intégrée pour effectuer le fractionnement des chaînes, mais il n'existe pas de fonction intégrée dans bash pour le faire. Il existe différentes méthodes pour effectuer une chaîne divisée dans bash. Voyons toutes les méthodes une par une avec des exemples.



Méthode 1 : Utilisation de la variable IFS

$IFS (Internal Field Separator) est une variable shell spéciale. Il est utilisé pour attribuer le délimiteur (une séquence d'un ou plusieurs caractères sur la base de laquelle nous souhaitons diviser la chaîne). N'importe quelle valeur ou caractère comme ' ', ' ', '-' etc. peut être le délimiteur. Après avoir attribué la valeur à la variable $IFS, la valeur de la chaîne doit être lue. Nous pouvons lire une chaîne en utilisant les options « -r » et « -a ».

  • '-r' : il lit la barre oblique inverse () comme un caractère au lieu d'un caractère d'échappement
  • '-a' : il est utilisé pour stocker les mots divisés dans une variable de tableau déclarée après l'option -a.

Exemple 1 : diviser la chaîne par espace

quel est le système de fichiers Linux

Code:



#!/bin/bash # String text='Welcome to techcodeview.com' # Set space as the delimiter IFS=' ' # Read the split words into an array # based on space delimiter read -ra newarr <<< '$text' # Print each value of the array by using # the loop for val in '${newarr[@]}'; do echo '$val' done>

Sortir:

Welcome to techcodeview.com>

Exemple 2 : diviser une chaîne par un symbole

Chaîne divisée à l'aide du symbole @.



Code:

#!/bin/bash #String text='Welcome@[email protected]@!!' # Set @ as the delimiter IFS='@' # Read the split words into an array # based on space delimiter read -ra newarr <<< '$text' # Print each value of the array by # using the loop for val in '${newarr[@]}'; do echo '$val' done>

Sortir:

Welcome to techcodeview.com !!>

Méthode 2 : sans utiliser la variable IFS

Dans cette méthode, la commande readarray avec l'option -d est utilisée pour diviser les données de chaîne. '-d' : cette option agit comme une variable IFS pour définir le délimiteur.

Exemple 1 : diviser la chaîne par espace

Code:

#!/bin/bash # Read the main string text='Welcome to techcodeview.com' # Split the string by space readarray -d ' ' -t strarr <<< '$text' # Print each value of the array by # using loop for (( n=0; n < ${#strarr[*]}; n++)) do echo '${strarr[n]}' done>

Voyons maintenant comment se comporte le script :

  • Le script définit la valeur detext>à Bienvenue sur techcodeview.com.
  • Lereadarray>La commande divise la chaîne en un tableau en utilisant l'espace comme délimiteur, ce qui donne le tableaustrarr>contenant les éléments suivants : Bienvenue sur techcodeview.com.
  • La boucle for parcourt chaque élément dustrarr>tableau.
  • Il imprime chaque élément un par un sur des lignes distinctes.

Sortir:

Welcome to techcodeview.com>

Exemple 2 : diviser en utilisant un côlon comme un délimiteur

Code:

#!/bin/bash # Read the main string text='Welcome:to:techcodeview.com' # Split the string based on the delimiter, ':' readarray -d : -t strarr <<< '$text' # Print each value of the array by using # loop for (( n=0; n < ${#strarr[*]}; n++)) do echo '${strarr[n]}' done>

Sortir:

Welcome to techcodeview.com>

Méthode 3 : diviser la chaîne avec un délimiteur à plusieurs caractères

Dans cette méthode, une variable est utilisée pour stocker des données de chaîne et une autre variable est utilisée pour stocker des données de délimiteur à plusieurs caractères. Une variable tableau est également déclarée pour stocker la chaîne divisée.

Code:

# Define the string to split text='HelloRomy HelloPushkar HelloNikhil HelloRinkle' # store multi-character delimiter delimiter='Hello' # Concatenate the delimiter with the # main string string=$text$delimiter # Split the text based on the delimiter newarray=() while [[ $string ]]; do newarray+=( '${string%%'$delimiter'*}' ) string=${string#*'$delimiter'} done # Print the words after the split for value in ${newarray[@]} do echo '$value ' done>

Sortir:

Romy Pushkar Nikhil Rinkle>