Dans le shell bash, lorsque vous utilisez un signe dollar suivi d'un nom de variable, le shell développe la variable avec sa valeur. Cette fonctionnalité du shell est appelée expansion des paramètres.
Mais l'expansion des paramètres a de nombreuses autres formes qui vous permettent d'étendre un paramètre et de modifier la valeur ou de remplacer d'autres valeurs dans le processus d'expansion. Dans cet article, voyons comment utiliser le concept d'expansion des paramètres pour les opérations de manipulation de chaînes.
Cet article fait partie de la série de tutoriels bash en cours. Reportez-vous à notre article précédent sur l'extension bash { }.
1. Identifier la longueur de la chaîne dans le script shell Bash
${#string}
Le format ci-dessus est utilisé pour obtenir la longueur de la variable bash donnée.
$ cat len.sh #! /bin/bash var="Welcome to the geekstuff" echo ${#var} $ ./len.sh 24
Pour en savoir plus sur les variables bash, lisez 6 exemples pratiques de variables globales et locales Bash.
2. Extraire une sous-chaîne d'une variable dans le script shell Bash
Bash fournit un moyen d'extraire une sous-chaîne d'une chaîne. L'exemple suivant explique comment analyser n caractères à partir d'une position particulière.
${string:position}
Extraire la sous-chaîne de $string à $position
${string:position:length}
Extrayez la sous-chaîne $length of characters de $string à partir de $position. Dans l'exemple ci-dessous, la première instruction echo renvoie la sous-chaîne à partir de la 15ème position. La deuxième instruction echo renvoie les 4 caractères à partir de la 15ème position. La longueur doit être le nombre supérieur ou égal à zéro.
$ cat substr.sh #! /bin/bash var="Welcome to the geekstuff" echo ${var:15} echo ${var:15:4} $ ./substr.sh geekstuff geek
Reportez-vous également à notre article précédent pour en savoir plus sur les paramètres spéciaux $*, $@, $#, $$, $!, $?, $-, $_ bash.
3. Correspondance de sous-chaîne la plus courte
La syntaxe suivante supprime la correspondance la plus courte de $substring devant $string
${string#substring}
La syntaxe suivante supprime la correspondance la plus courte de $substring à l'arrière de $string
${string%substring}
L'exemple de script shell suivant explique les deux concepts de correspondance de sous-chaîne les plus courts ci-dessus.
$ cat shortest.sh #! /bin/bash filename="bash.string.txt" echo ${filename#*.} echo ${filename%.*} $ ./shortest.sh After deletion of shortest match from front: string.txt After deletion of shortest match from back: bash.string
Dans la première instruction d'écho, la sous-chaîne "*." correspond aux caractères et à un point, et # supprime le début de la chaîne, de sorte qu'elle supprime la sous-chaîne "bash". à partir de la variable appelée nom de fichier. Dans la deuxième instruction d'écho, la sous-chaîne '.*' correspond à la sous-chaîne commence par un point et % supprime l'arrière de la chaîne, de sorte qu'elle supprime la sous-chaîne '.txt'
4. Correspondance de sous-chaîne la plus longue
La syntaxe suivante supprime la correspondance la plus longue de $substring à partir du début de $string
${string##substring}
La syntaxe suivante supprime la correspondance la plus longue de $substring à l'arrière de $string
${string%%substring}
L'exemple de script shell suivant explique les deux concepts de correspondance de sous-chaîne les plus longs ci-dessus.
$ cat longest.sh #! /bin/bash filename="bash.string.txt" echo "After deletion of longest match from front:" ${filename##*.} echo "After deletion of longest match from back:" ${filename%%.*} $ ./longest.sh After deletion of longest match from front: txt After deletion of longest match from back: bash
Dans l'exemple ci-dessus, ##*. supprime la correspondance la plus longue pour '*.' qui correspond à "bash.string". donc après avoir rayé cela, il imprime le txt restant. Et %%.* supprime la correspondance la plus longue pour .* à partir de l'arrière qui correspond à ".string.txt". Après la suppression, il renvoie "bash".
5. Rechercher et remplacer les valeurs de chaîne dans le script shell Bash
Remplacer uniquement la première correspondance
${string/pattern/replacement}
Il correspond au modèle dans la variable $string et remplace uniquement la première correspondance du modèle par le remplacement.
$ cat firstmatch.sh #! /bin/bash filename="bash.string.txt" echo "After Replacement:" ${filename/str*./operations.} $ ./firstmatch.sh After Replacement: bash.operations.txt
Remplacer toutes les correspondances
${string//pattern/replacement}
Il remplace toutes les correspondances de motif par remplacement.
$ cat allmatch.sh #! /bin/bash filename="Path of the bash is /bin/bash" echo "After Replacement:" ${filename//bash/sh} $ ./allmatch.sh After Replacement: Path of the sh is /bin/sh
En ce qui concerne la recherche et le remplacement, reportez-vous à nos articles précédents - exemples de substitution sed et recherche et remplacement Vim.
Remplacer le début et la fin
${string/#pattern/replacement}
La syntaxe suivante est remplacée par la chaîne de remplacement, uniquement lorsque le modèle correspond au début de la chaîne $.
${string/%pattern/replacement}
La syntaxe suivante est remplacée par la chaîne de remplacement, uniquement lorsque le modèle correspond à la fin de la $string donnée.
$ cat posmatch.sh #! /bin/bash filename="/root/admin/monitoring/process.sh" echo "Replaced at the beginning:" ${filename/#\/root/\/tmp} echo "Replaced at the end": ${filename/%.*/.ksh} $ ./posmatch.sh Replaced at the beginning: /tmp/admin/monitoring/process.sh Replaced at the end: /root/admin/monitoring/process.ksh
Lecture recommandée
Bash 101 Hacks, par Ramesh Natarajan . Je passe la plupart de mon temps sur l'environnement Linux. Donc, naturellement, je suis un grand fan de la ligne de commande Bash et des scripts shell. Il y a 15 ans, lorsque je travaillais sur différentes versions de *nix, j'écrivais beaucoup de code sur le shell C et le shell Korn. Des années plus tard, lorsque j'ai commencé à travailler sur Linux en tant qu'administrateur système, j'ai pratiquement automatisé toutes les tâches possibles à l'aide de scripts shell Bash. Sur la base de mon expérience avec Bash, j'ai écrit le livre électronique Bash 101 Hacks qui contient 101 exemples pratiques sur la ligne de commande Bash et les scripts shell. Si vous songez à maîtriser Bash, rendez-vous service et lisez ce livre, qui vous aidera à prendre le contrôle de votre ligne de commande Bash et de vos scripts shell.