Comment utiliser set et pipefail dans les scripts Bash sous Linux
Agence web » Actualités du digital » Comment manipuler des chaînes dans Bash sous Linux

Comment manipuler des chaînes dans Bash sous Linux

S’il y a une chose dont Linux est bien équipé, ce sont les utilitaires de manipulation de chaînes. Mais il y a aussi tout un ensemble de fonctionnalités intégrées directement dans le shell Bash. Voici comment il est utilisé.

Manipulation de chaînes

L’écosystème Linux regorge d’outils fantastiques pour travailler avec du texte et des chaînes. Ceux-ci incluent awk, grep, sed et cut. Pour toute dispute de texte lourd, ceux-ci devraient être vos choix de prédilection.

Parfois cependant, il est pratique d’utiliser les capacités intégrées du shell, en particulier lorsque vous écrivez un script court et simple. Si votre script va être partagé avec d’autres personnes et qu’il va s’exécuter sur leurs ordinateurs, l’utilisation de la fonctionnalité standard de Bash signifie que vous n’avez pas à vous interroger sur la présence ou la version de l’un des autres utilitaires.

Si vous avez besoin de la puissance des utilitaires dédiés, utilisez-les par tous les moyens. C’est pour ça qu’ils sont là. Mais souvent, votre script et Bash peuvent faire le travail par eux-mêmes.

Parce qu’ils sont intégrés à Bash, vous pouvez les utiliser dans des scripts ou sur la ligne de commande. Les utiliser dans une fenêtre de terminal est un moyen rapide et pratique de prototyper vos commandes et de perfectionner la syntaxe. Il évite le cycle d’édition, d’enregistrement, d’exécution et de débogage.

Création et utilisation de variables de chaîne

Tout ce dont nous avons besoin pour déclarer une variable et lui attribuer une chaîne est de nommer la variable, utilisez le signe égal =, et fournissez la chaîne. S’il y a des espaces dans votre chaîne, placez-la entre guillemets simples ou doubles. Assurez-vous qu’il n’y a pas d’espace de part et d’autre du signe égal.

my_string="Hello, How-To Geek World."
echo $my_string

Création et écriture d'une variable chaîne

Une fois que vous avez créé une variable, ce nom de variable est ajouté à la liste des mots de complétion de tabulation du shell. Dans cet exemple, en tapant « my_ » et en appuyant sur la touche « Tab », vous avez entré le nom complet sur la ligne de commande.

Variables en lecture seule

Il y a un declare commande que nous pouvons utiliser pour déclarer des variables. Dans les cas simples, vous n’en avez pas vraiment besoin, mais son utilisation vous permet d’utiliser certaines des options de la commande. Probablement celui que vous utiliserez le plus est le -r (lecture seule). Cela crée une variable en lecture seule qui ne peut pas être modifiée.

declare -r read_only_var="This is an immutable string!"

Si nous essayons de lui attribuer une nouvelle valeur, cela échouera.

read_only_var="A new string..."

Échec de la modification d'une variable de chaîne en lecture seule

Écrire dans la fenêtre du terminal

Nous pouvons écrire plusieurs chaînes dans la fenêtre du terminal en utilisant echo ou printf afin qu’elles apparaissent comme s’il s’agissait d’une seule chaîne. Et nous ne sommes pas limités à nos propres variables de chaînes, nous pouvons incorporer des variables d’environnement dans nos commandes.

user_account="Your user account is:"
echo $user_account $USER

Écrire deux chaînes dans la fenêtre du terminal comme s'il s'agissait d'une seule chaîne

Concaténer des chaînes

L’opérateur plus-égal, +=, vous permet « d’ajouter » deux chaînes ensemble. C’est ce qu’on appelle la concaténation.

user_account="Your user account is:"
user_account+=$USER
echo $user_account

Concaténer des chaînes avec +=

Notez que vous n’obtenez pas d’espace ajouté automatiquement entre les chaînes concaténées. Si vous avez besoin d’un espace, vous devez en mettre un explicitement à la fin de la première chaîne ou au début de la seconde.

user_account="Your user account is: "
user_account+=$USER
echo $user_account

Ajouter un espace supplémentaire avant d'utiliser += pour concaténer deux chaînes

Lecture de l’entrée utilisateur

En plus de créer des variables de chaîne dont le contenu est défini dans le cadre de leur déclaration, nous pouvons lire l’entrée de l’utilisateur dans une variable de chaîne.

La read la commande lit l’entrée de l’utilisateur. La -p (invite) écrit une invite dans la fenêtre du terminal. L’entrée de l’utilisateur est stockée dans la variable de chaîne. Dans cet exemple, la variable s’appelle user_file.

read -p "Open which file? " user_file
echo $user_file

Lecture de l'entrée de chaîne utilisateur

Si vous ne fournissez pas de variable de chaîne pour capturer l’entrée, cela fonctionnera toujours. L’entrée utilisateur sera stockée dans une variable appelée REPLY.

read -p "Open which file? "
echo $REPLY

Lecture de l'entrée utilisateur sans fournir de variable de chaîne

Il est généralement plus pratique de fournir votre propre variable et de lui donner un nom significatif.

Manipulation de chaînes

Maintenant que nous avons nos chaînes, qu’elles soient définies au moment de la création, lues à partir de l’entrée de l’utilisateur ou créées en concaténant des chaînes, nous pouvons commencer à faire des choses avec elles.

Trouver la longueur de la chaîne

S’il est important ou utile de connaître la longueur d’une chaîne, on peut l’obtenir en faisant précéder le nom de la variable d’un dièse « # » symbole.

my_string="There are 39 characters in this string."
echo ${#my_string}

Obtenir la longueur d'une chaîne

Nous pouvons extraire une sous-chaîne d’une variable de chaîne en fournissant un point de départ dans la chaîne et une longueur facultative. Si nous ne fournissons pas de longueur, la sous-chaîne contiendra tout depuis le point de départ jusqu’au dernier caractère.

Le point de départ et la longueur suivent le nom de la variable, avec deux-points « : » entre eux. Notez que les caractères d’une variable chaîne sont numérotés à partir de zéro.

long_string="Frankenstein or the Modern Prometheus"
substring=${long_string:0:12}
echo $substring
echo ${long_string:27}

Extraction de sous-chaînes au début et à la fin d'une chaîne

Une autre variante vous permet de supprimer un certain nombre de lettres de la fin de la chaîne. En effet, il vous permet de définir un point de départ et d’utiliser un nombre négatif comme longueur. La sous-chaîne contiendra les caractères du point de départ jusqu’à la fin de la chaîne, moins le nombre de caractères que vous avez spécifié dans le nombre négatif.

my_string="alphabetical"
echo ${my_string:5:-4}

Extraire une sous-chaîne du milieu d'une chaîne

Dans tous les cas, la variable de chaîne d’origine est intacte. La sous-chaîne « extraite » n’est pas réellement supprimée du contenu de la variable.

L’inconvénient d’utiliser des décalages de caractères est que vous devez savoir à l’avance où se trouvent les sous-chaînes que vous souhaitez extraire dans la chaîne.

Si votre chaîne est délimitée par un caractère répétitif, vous pouvez extraire des sous-chaînes sans savoir où elles se trouvent dans la chaîne, ni leur longueur.

Pour rechercher à partir du début de la chaîne, suivez le nom de la variable avec des signes de pourcentage doubles, %%le caractère de délimitation et un astérisque, *. Les mots de cette chaîne sont délimités par des espaces.

long_string="first second third fourth fifth"
echo ${long_string%%' '*}

Extraction d'une sous-chaîne du début d'une chaîne par délimiteur

Cela renvoie la première sous-chaîne à partir du début de la chaîne qui ne contient pas le caractère délimiteur. C’est ce qu’on appelle l’option de sous-chaîne courte.

L’option de sous-chaîne longue renvoie la partie avant de la chaîne jusqu’à la dernière sous-chaîne délimitée. En d’autres termes, il omet la dernière sous-chaîne délimitée. Syntaxiquement, la seule différence est qu’il utilise un seul signe de pourcentage « % » dans la commande.

long_string="first second third fourth fifth"
echo ${long_string%' '*}

Extraire une longue sous-chaîne du début d'une chaîne par délimiteur

Comme vous vous en doutez, vous pouvez rechercher de la même manière à partir de la fin de la chaîne. Au lieu d’un signe de pourcentage, utilisez un dièse « #” signe, et déplacer le délimiteur à venir après l’astérisque « * » dans la commande.

long_string="this.long.string.of.words.is.delimited.by.periods"
echo ${long_string##*.}

Extraction d'une sous-chaîne à partir de la fin d'une chaîne par délimiteur

Il s’agit de l’option de sous-chaîne courte, elle supprime la première sous-chaîne qu’elle trouve à l’arrière de la chaîne qui ne contient pas le délimiteur.

long_string="this.long.string.of.words.is.delimited.by.periods"
echo ${long_string#*.}

Extraction d'une longue sous-chaîne à partir de la fin d'une chaîne par délimiteur

L’option de sous-chaîne longue renvoie la partie arrière de la chaîne jusqu’au premier délimiteur à partir du début de la chaîne. En d’autres termes, il omet la première sous-chaîne délimitée.

Substitution de sous-chaîne

Échanger des sous-chaînes contre d’autres sous-chaînes est facile. Le format est le nom de la chaîne, la sous-chaîne qui sera remplacée et la sous-chaîne qui sera insérée, séparées par une barre oblique « / » personnages.

string="blue pig giggles"
echo ${string/pig/goat}

Substitution d'une sous-chaîne dans une chaîne

Pour limiter la recherche à la fin de la chaîne, faites précéder la chaîne de recherche d’un signe de pourcentage « %  » personnage.

string="blue pig giggles"
echo ${string/%giggles/chuckles}

Substitution d'une sous-chaîne à la fin d'une chaîne

Pour limiter la recherche au début de la chaîne, faites précéder la chaîne de recherche d’un dièse « # » personnage.

string="blue pig giggles"
echo ${string/#blue/yellow}

Substitution d'une sous-chaîne au début d'une chaîne

Une chaîne est une chose flexible

Si une chaîne n’est pas exactement comme vous l’aimeriez ou en auriez besoin, ces outils vous aideront à la reformater pour qu’elle réponde à vos besoins. Pour les transformations compliquées, utilisez les utilitaires dédiés, mais pour les modifications mineures, utilisez les éléments intégrés du shell et évitez les frais généraux liés au chargement et à l’exécution d’un outil externe.

★★★★★