Diviser la chaîne dans Bash

Fumbani Banda 30 janvier 2023
  1. Utiliser la commande tr pour diviser une chaîne dans Bash
  2. Utiliser IFS pour diviser une chaîne dans Bash
  3. Utilisation de la commande read pour diviser une chaîne dans Bash
  4. Utilisation de l’expansion des paramètres pour diviser une chaîne dans Bash
  5. Utilisation de la commande couper pour diviser une chaîne dans Bash
Diviser la chaîne dans Bash

Ce tutoriel montre comment diviser une chaîne sur un délimiteur en bash à l’aide de la commande tr, de l’IFS, de la commande read, de l’expansion des paramètres et de la commande cut.

Utiliser la commande tr pour diviser une chaîne dans Bash

La commande tr est une forme abrégée de translate. Il traduit, supprime et compresse les caractères de l’entrée standard et écrit les résultats dans la sortie standard.

C’est une commande utile pour manipuler du texte sur la ligne de commande ou dans un script bash. Il peut supprimer les caractères répétés, convertir les minuscules en majuscules et remplacer les caractères.

Dans le script bash ci-dessous, la commande echo dirige la variable de chaîne, $addrs, vers la commande tr, qui divise la variable de chaîne sur un délimiteur, -. Une fois la chaîne découpée, les valeurs sont affectées à la variable IP.

Ensuite, la boucle for parcourt la variable $IP et imprime toutes les valeurs à l’aide de la commande echo.

#!/usr/bin/env bash

addrs="192.168.8.1-192.168.8.2-192.168.8.3-192.168.8.4"

IP=$(echo $addrs | tr "-" "\n")

for ip in $IP
do
    echo "$ip"
done

La sortie ci-dessous montre que la variable de chaîne $addr a été divisée sur le délimiteur, -, en 4 chaînes distinctes.

192.168.8.1
192.168.8.2
192.168.8.3
192.168.8.4

Utiliser IFS pour diviser une chaîne dans Bash

IFS signifie Internal Field Separator (séparateur de champ interne).

Le IFS est utilisé pour diviser les mots après expansion et pour diviser les lignes en mots avec la commande intégrée read. La valeur de IFS indique au shell comment reconnaître les limites des mots.

La valeur par défaut du IFS est un espace, une tabulation et une nouvelle ligne. Dans le script ci-dessous, la valeur d’origine de IFS a été stockée dans la variable OIFS et la nouvelle valeur IFS a été définie sur -.

Cela signifie que le shell doit traiter - comme la nouvelle limite de mot. Le shell divise la variable de chaîne addrs sur - et affecte les nouvelles valeurs à la variable ips.

Ensuite, la boucle for parcourt la variable $ips et imprime toutes les valeurs à l’aide de la commande echo.

IFS=$OIFS est utilisé pour restaurer la valeur d’origine de la variable IFS, et unset OIFS indique au shell de supprimer la variable OIFS de la liste des variables dont il assure le suivi.

#!/usr/bin/env bash

addrs="192.168.8.1-192.168.8.2-192.168.8.3-192.168.8.4"

OIFS=$IFS
IFS='-'

ips=$addrs
for ip in $ips
do
    echo "$ip"
done
IFS=$OIFS
unset OIFS

La sortie ci-dessous montre que la variable de chaîne $addr a été divisée sur le délimiteur, -, en 4 chaînes distinctes.

192.168.8.1
192.168.8.2
192.168.8.3
192.168.8.4

Utilisation de la commande read pour diviser une chaîne dans Bash

La commande read est une commande intégrée sur les systèmes Linux.

Il permet de lire le contenu d’une ligne dans une variable. Il divise également les mots d’une chaîne affectée à une variable shell.

La chaîne de caractères de la variable $addrs est passée à la commande read dans le script ci-dessous. Le IFS définit le délimiteur qui agit comme une limite de mot sur la variable de chaîne.

Cela signifie que le - est le mot limite dans notre cas. L’option -a indique à la commande read de stocker les mots qui ont été divisés dans un tableau, tandis que l’option -r indique à la commande read de traiter tous les caractères d’échappement tels qu’ils sont et de ne pas les interpréter.

Les mots qui ont été séparés sont stockés dans le tableau IP. La boucle for parcourt le tableau $IP et imprime toutes les valeurs à l’aide de la commande echo.

#!/usr/bin/env bash

addrs="192.168.8.1-192.168.8.2-192.168.8.3-192.168.8.4"


IFS='-' read -ra  IP <<< "$addrs"
for ip in "${IP[@]}";
do
    echo "$ip"
done

À partir de la sortie ci-dessous, nous pouvons observer que la variable de chaîne $addr a été divisée sur le délimiteur, -, en 4 chaînes distinctes.

192.168.8.1
192.168.8.2
192.168.8.3
192.168.8.4

Utilisation de l’expansion des paramètres pour diviser une chaîne dans Bash

Le script ci-dessous utilise l’expansion des paramètres pour rechercher et remplacer des caractères. La syntaxe utilisée pour l’expansion des paramètres est ${variable//search/replace}. Cela recherche un motif qui correspond à search dans la variable et le remplace par le replace.

Dans notre cas, le script recherche le motif - et le remplace par un espace blanc. Les parenthèses autour de ${addrs//-/ } sont utilisées pour définir un tableau de la nouvelle chaîne, appelé ip_array.

Nous utilisons la boucle for pour itérer sur tous les éléments variables ip_array et les afficher à l’aide de la commande echo.

#!/usr/bin/env bash

addrs="192.168.8.1-192.168.8.2-192.168.8.3-192.168.8.4"


ip_array=(${addrs//-/ })
for ip in "${ip_array[@]}"
do
    echo "$ip"
done

La sortie ci-dessous montre tous les éléments dans le ip_array.

192.168.8.1
192.168.8.2
192.168.8.3
192.168.8.4

Nous pouvons accéder aux éléments individuels de la variable ip_array en passant l’index. Dans le script ci-dessous, nous avons passé l’index 0 pour faire référence au premier élément du tableau.

#!/usr/bin/env bash

addrs="192.168.8.1-192.168.8.2-192.168.8.3-192.168.8.4"


ip_array=(${addrs//-/ })
printf "${ip_array[0]}\n"

La sortie affiche le premier élément du ip_array.

192.168.8.1

Utilisation de la commande couper pour diviser une chaîne dans Bash

Le script ci-dessous utilise la commande cut pour extraire une sous-chaîne. L’option -d spécifie le délimiteur à utiliser pour diviser la chaîne en champs et l’option -f définit le numéro du champ à extraire.

Mais la chaîne est divisée en utilisant - comme délimiteur, dans notre cas, et pour accéder au premier champ, on passe l’argument 1 à l’option -f, et on fait de même pour accéder au deuxième champ en en passant 2 à l’option -f.

Les valeurs sont affectées aux variables ip_one et ip_two, respectivement. La commande printf permet d’afficher les valeurs des variables.

#!/usr/bin/env bash

addrs="192.168.8.1-192.168.8.2-192.168.8.3-192.168.8.4"


ip_one=$(echo $addrs | cut -d '-' -f 1)
ip_two=$(echo $addrs | cut -d '-' -f 2)

printf "$ip_one\n$ip_two\n"

La sortie ci-dessous affiche les première et deuxième chaînes séparées de la variable de chaîne $addrs.

192.168.8.1
192.168.8.2
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub

Article connexe - Bash String