Diviser la chaîne dans Bash
-
Utiliser la commande
tr
pour diviser une chaîne dans Bash -
Utiliser
IFS
pour diviser une chaîne dans Bash -
Utilisation de la commande
read
pour diviser une chaîne dans Bash - Utilisation de l’expansion des paramètres pour diviser une chaîne dans Bash
-
Utilisation de la commande
couper
pour diviser une 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