GNU/Linux >> Tutoriels Linux >  >> Linux

Exemples de manipulation de chaînes Bash - Longueur, sous-chaîne, rechercher et remplacer

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.


Linux
  1. Bash For Loop Guide et exemples

  2. Utiliser "sed" pour rechercher et remplacer ?

  3. Utiliser grep et sed pour rechercher et remplacer une chaîne

  4. trouver le texte correspondant et remplacer la ligne suivante

  5. bash - trouve la position de l'index de chaîne de la sous-chaîne

Script Bash - Manipulation de chaînes

Comment utiliser la commande SED pour rechercher et remplacer une chaîne dans des fichiers

Comment rechercher et remplacer du texte, un mot ou une chaîne dans un fichier

50 exemples simples et utiles de la commande Find sous Linux

Remplacement d'une sous-chaîne par une autre chaîne dans Bash

Comment utiliser Sed pour rechercher et remplacer une chaîne dans un fichier