Fractionner une chaîne sur un délimiteur dans Bash

Fractionner une chaîne sur un délimiteur dans Bash
Fractionner une chaîne sur un délimiteur dans Bash

Décomposer la manipulation des chaînes dans Bash

Lorsque vous travaillez avec des scripts shell, une tâche courante consiste à diviser une chaîne en fonction d'un délimiteur. Par exemple, considérons une chaîne contenant des adresses e-mail séparées par des points-virgules. Si vous devez traiter chaque e-mail individuellement, comprendre comment diviser cette chaîne devient essentiel. Cet article vous guidera à travers différentes méthodes pour y parvenir dans Bash.

Nous explorerons des solutions telles que l'utilisation de la commande « tr » et la manipulation du séparateur de champ interne (IFS). À la fin, vous serez en mesure de gérer efficacement le fractionnement des chaînes et de réinitialiser l'IFS à sa valeur par défaut. Plongeons-nous et simplifions vos tâches de script Bash !

Commande Description
tr Traduit ou supprime des caractères. Utilisé ici pour remplacer le point-virgule par un caractère de nouvelle ligne pour diviser la chaîne.
IFS Séparateur de champ interne, utilisé pour diviser les chaînes en fonction d'un délimiteur spécifique dans les scripts Bash.
read -r -a Lit une ligne d'entrée et la divise en un tableau. L'option -r empêche les barres obliques inverses d'être interprétées comme des caractères d'échappement.
echo Imprime le texte sur la sortie standard. Utilisé pour afficher les éléments de chaîne divisée.
split Une fonction Perl qui divise une chaîne en une liste de chaînes en fonction d'un délimiteur spécifié.
foreach Une structure de boucle Perl qui parcourt une liste de valeurs.

Comprendre les techniques de fractionnement de chaînes Bash

Le premier script Bash montre comment diviser une chaîne à l'aide du tr commande. Ici, nous définissons une chaîne IN="bla@some.com;john@home.com" et utilise echo en collaboration avec tr pour traduire le délimiteur point-virgule en caractère de nouvelle ligne. Cela divise efficacement la chaîne en lignes individuelles. Le for La boucle parcourt ensuite chaque ligne, imprimant les adresses entre crochets. Cette méthode est simple et exploite les puissantes capacités de traitement de texte des commandes Unix pour manipuler les chaînes.

Une autre méthode consiste à ajuster le Internal Field Separator (IFS). En réglant temporairement IFS en point-virgule, nous pouvons diviser la chaîne en un tableau. Nous sauvegardons l'original IFS à OIFS avant de le modifier, en nous assurant de pouvoir le restaurer plus tard. Le read -r -a La commande lit la chaîne d'entrée dans un tableau appelé dix, en le divisant en fonction de la modification IFS. Après traitement, l'original IFS est restauré. Cette approche fournit un moyen plus programmatique de gérer le fractionnement de chaînes dans Bash, nous permettant d'utiliser des tableaux pour des manipulations ultérieures.

Utiliser Bash pour diviser des chaînes sur un délimiteur

Script bash

#!/usr/bin/env bash
# Input string
IN="bla@some.com;john@home.com"
# Split string using 'tr' and iterate
mails=$(echo $IN | tr ";" "\n")
for addr in $mails; do
  echo "> [$addr]"
done

# Output:
# > [bla@some.com]
# > [john@home.com]

Fractionner une chaîne dans Bash à l'aide d'IFS

Script bash

#!/usr/bin/env bash
# Input string
IN="bla@some.com;john@home.com"
# Save the original IFS
OIFS=$IFS
# Set IFS to semicolon
IFS=';'
# Split string into an array
read -r -a mails2 <<< "$IN"
# Restore the original IFS
IFS=$OIFS
# Iterate over the array
for x in "${mails2[@]}"; do
  echo "> [$x]"
done

# Output:
# > [bla@some.com]
# > [john@home.com]

Utiliser Python pour le fractionnement de chaînes

Script Python

#!/usr/bin/env python3
# Input string
IN = "bla@some.com;john@home.com"
# Split string by semicolon
mails = IN.split(';')
# Iterate and print each element
for addr in mails:
    print(f"> [{addr}]")

# Output:
# > [bla@some.com]
# > [john@home.com]

Utiliser Perl pour diviser une chaîne

Script Perl

#!/usr/bin/env perl
use strict;
use warnings;
# Input string
my $IN = "bla@some.com;john@home.com";
# Split string by semicolon
my @mails = split(';', $IN);
# Iterate and print each element
foreach my $addr (@mails) {
    print "> [$addr]\n";
}

# Output:
# > [bla@some.com]
# > [john@home.com]

Techniques avancées de fractionnement de chaînes dans Bash

Une autre méthode puissante pour diviser des chaînes dans Bash consiste à utiliser le awk commande. awk est un utilitaire de ligne de commande polyvalent conçu pour l'analyse et le traitement de modèles. Cela peut être particulièrement utile pour diviser des chaînes car cela nous permet de définir des séparateurs de champs personnalisés. Par exemple, nous pouvons utiliser awk -F";" '{print $1, $2}' pour diviser une chaîne en fonction du délimiteur point-virgule et imprimer les composants individuels. Cette méthode est très flexible et peut gérer des tâches de manipulation de chaînes plus complexes, ce qui en fait un outil précieux dans la boîte à outils d'un programmeur Bash.

De plus, le cut La commande peut être utilisée pour diviser des chaînes en fonction de délimiteurs. Le cut La commande est généralement utilisée pour extraire des sections de chaque ligne de données d’entrée. En spécifiant un délimiteur avec le -d et en sélectionnant les champs avec l'option -f option, nous pouvons diviser et extraire efficacement des parties d’une chaîne. Par exemple, en utilisant echo $IN | cut -d';' -f1 extrairait la première adresse e-mail de la chaîne d’entrée. Ces méthodes avancées offrent plus de contrôle et de précision pour les tâches de manipulation de chaînes dans Bash.

Questions et réponses courantes sur le fractionnement de chaînes dans Bash

  1. Comment diviser une chaîne sur un délimiteur dans Bash ?
  2. Vous pouvez utiliser le IFS variable ou des commandes comme tr, awk, et cut pour diviser des chaînes sur un délimiteur.
  3. Quel est le IFS variable dans Bash ?
  4. Le IFS (Internal Field Separator) est une variable spéciale qui définit le(s) caractère(s) utilisé(s) pour diviser le texte saisi en mots ou en jetons.
  5. Comment puis-je réinitialiser le IFS variable à sa valeur par défaut ?
  6. Enregistrez l'original IFS valeur avant de la modifier, et restaurez-la après traitement : OIFS=$IFS; IFS=';'; ... ; IFS=$OIFS.
  7. Que fait le tr la commande est-elle effectuée dans le fractionnement de chaînes ?
  8. Le tr La commande traduit ou supprime des caractères. Il peut remplacer les délimiteurs par des nouvelles lignes pour diviser une chaîne : echo $IN | tr ";" "\n".
  9. Puis-je diviser une chaîne en un tableau à l’aide de Bash ?
  10. Oui, en changeant le IFS variable et en utilisant read -r -a, vous pouvez diviser une chaîne en un tableau : read -r -a array <<< "$string".
  11. Quel est le awk commande utilisée pour ?
  12. awk est un utilitaire de ligne de commande pour l'analyse et le traitement de modèles. Il peut diviser les chaînes en définissant des séparateurs de champs personnalisés.
  13. Comment le cut travail de commandement ?
  14. Le cut commande extraire les sections de chaque ligne d’entrée. Il peut diviser une chaîne en spécifiant un délimiteur et en sélectionnant des champs : echo $string | cut -d';' -f1.
  15. Pourquoi utilise-t-on IFS utile pour diviser les chaînes ?
  16. En utilisant IFS vous permet de définir des délimiteurs personnalisés pour diviser les chaînes, ce qui le rend polyvalent pour différents formats d'entrée.
  17. Est-il possible de diviser une chaîne par plusieurs délimiteurs dans Bash ?
  18. Oui, vous pouvez utiliser une combinaison de tr et awk pour gérer plusieurs délimiteurs.
  19. Puis-je utiliser sed pour le fractionnement de chaînes dans Bash ?
  20. Alors que sed est avant tout un éditeur de flux, il peut être combiné avec d'autres commandes comme awk pour diviser les chaînes indirectement.

Réflexions finales sur le fractionnement des chaînes dans Bash

Maîtriser la manipulation des chaînes dans Bash peut améliorer considérablement l'efficacité de vos scripts. Que ce soit en utilisant IFS pour des délimiteurs simples ou des outils plus avancés comme tr et awk, ces techniques sont essentielles pour une programmation Bash efficace. N'oubliez pas de toujours restaurer l'original IFS pour éviter un comportement inattendu dans vos scripts. Avec ces méthodes, vous pouvez gérer un large éventail de tâches de traitement de chaînes dans vos scripts Bash.