L'une des opérations les plus courantes lorsque vous travaillez avec des chaînes dans Bash consiste à déterminer si une chaîne contient ou non une autre chaîne.
Dans cet article, nous allons vous montrer plusieurs façons de vérifier si une chaîne contient une sous-chaîne.
Utilisation des caractères génériques #
L'approche la plus simple consiste à entourer la sous-chaîne de symboles génériques astérisque (astérisque) *
et comparez-le avec la chaîne. Le joker est un symbole utilisé pour représenter zéro, un ou plusieurs caractères.
Si le test renvoie true
, la sous-chaîne est contenue dans la chaîne.
Dans l'exemple ci-dessous, nous utilisons l'instruction if et l'opérateur d'égalité (==
) pour vérifier si la sous-chaîne SUB
se trouve dans la chaîne STR
:
#!/bin/bash
STR='GNU/Linux is an operating system'
SUB='Linux'
if [[ "$STR" == *"$SUB"* ]]; then
echo "It's there."
fi
Une fois exécuté, le script affichera :
It's there.
Utilisation de l'opérateur de cas #
Au lieu d'utiliser l'instruction if, vous pouvez également utiliser l'instruction case pour vérifier si une chaîne inclut ou non une autre chaîne.
#!/bin/bash
STR='GNU/Linux is an operating system'
SUB='Linux'
case $STR in
*"$SUB"*)
echo -n "It's there."
;;
esac
Utilisation de l'opérateur Regex #
Une autre option pour déterminer si une sous-chaîne spécifiée se produit dans une chaîne consiste à utiliser l'opérateur regex =~
. Lorsque cet opérateur est utilisé, la chaîne de droite est considérée comme une expression régulière.
Le point suivi d'un astérisque .*
correspond à zéro ou plusieurs occurrences de n'importe quel caractère sauf un caractère de saut de ligne.
#!/bin/bash
STR='GNU/Linux is an operating system'
SUB='Linux'
if [[ "$STR" =~ .*"$SUB".* ]]; then
echo "It's there."
fi
Le script fera écho à ce qui suit :
It's there.
Utilisation de Grep #
La commande grep peut également être utilisée pour rechercher des chaînes dans une autre chaîne.
Dans l'exemple suivant, nous transmettons la chaîne $STR
comme entrée à grep et en vérifiant si la chaîne $SUB
se trouve dans la chaîne d'entrée. La commande renverra true
ou false
le cas échéant.
#!/bin/bash
STR='GNU/Linux is an operating system'
SUB='Linux'
if grep -q "$SUB" <<< "$STR"; then
echo "It's there"
fi
Le -q
l'option indique à grep de se taire, d'omettre la sortie.
Conclusion #
Vérifier si une chaîne contient une sous-chaîne est l'une des opérations les plus élémentaires et les plus fréquemment utilisées dans les scripts Bash.
Après avoir lu ce didacticiel, vous devriez avoir une bonne compréhension de la façon de tester si une chaîne inclut une autre chaîne. Vous pouvez également utiliser d'autres commandes comme awk
ou sed
pour les tests.
Si vous avez des questions ou des commentaires, n'hésitez pas à laisser un commentaire.