Ceci est une ancienne révision du document !
Manipulations des chaînes de caractères
Création — — Nicolas THOREZ 2021/07/22 15:34
Manipulation via une variable
Il est possible de manipuler une chaîne de caractères directement en intervenant sur la variable de la manière suivante :
TEXT="Chaîne"
# Manipulation pour mettre la chaîne de caractères en majuscule
echo ${TEXT^^}
# Retour
CHAÎNE
Le tableau suivant indique les principales manipulations pouvant être appliquées à notre variable $TEXT :
| Manipulation | Explication | Exemple |
|---|---|---|
${#TEXT} | Affiche la taille de la chaîne. | echo ${#TEXT}
6 |
${TEXT^^} | Mise en majuscule. | echo ${TEXT^^}
CHAÎNE |
${TEXT,,} | Mise en minuscule. | echo ${TEXT,,}
chaîne |
${TEXT: +n} | Récupère les n premiers caractères. | echo ${TEXT: +2}
Ch |
${TEXT:: +n} | Supprime les n premiers caractères. | echo ${TEXT:: +2}
aîne |
${TEXT: -n} | Récupère les n derniers caractères. | echo ${TEXT: -2}
ne |
${TEXT:: -n} | Supprime les n derniers caractères. | echo ${TEXT:: -2}
Chaî |
${TEXT:x} | Extraie tous les caractères à partir de l'index x sachant que le premier caractère est le n°0. | echo ${TEXT:2}
aîne |
${TEXT:x:y} | Extraie les y caractères à partir de l'index x sachant que le premier caractère est le n°0. | echo ${TEXT:2:3}
aîn |
${TEXT:x:-y} | Extraie les caractères à partir de l'index x sachant que le premier caractère est le n°0 en supprimant les y derniers caractères. | echo ${TEXT:2:-3}
a |
${TEXT/abc/xyz} | Remplace la première occurrence de abc par xyz. | echo ${TEXT/aî/i}
Chine |
${TEXT//abc/xyz} | Remplace toutes les occurrences de abc par xyz. | TEXT="Toto"
echo ${TEXT//o/i}
Titi |
${TEXT/#abc/xyz} | Remplace abc par xyz si abc correspond aux premiers caractères de la chaîne. | TEXT="anna"
echo ${TEXT/#a/o}
onna |
${TEXT/%abc/xyz} | Remplace abc par xyz si abc correspond aux derniers caractères de la chaîne. | TEXT="anna"
echo ${TEXT/%a/o}
anno |
${TEXT%%[[:cntrl:]]} | Supprime les caractères de contrôle en fin de chaîne. | TEXT="Test\r\n"
echo ${TEXT%%[[:cntrl:]]}
Test |
La commande awk
- Référence : Manuel de la commande awk
awk est un puissant utilitaire permettant la manipulation de texte dans une chaîne de caractère et/ou dans un fichier texte. Avant de commencer à utiliser awk, il faut connaître quelques points importants :
awkmanipule des champs de texte et non des caractères.- Le séparateur de champs par défaut est un espace vide pouvant être un espace simple, multiple, une tabulation et/ou un retour à la ligne.
awkest un interpréteur de commandes. Son utilisation sera toujours de typeawk 'script'.- Chaque champ est défini par le caratère
$et numéroté à partir de 1. Ainsi, le premier champs est$1, le second$2, etc… Le champ$0correspond alors à la ligne complète. - Utilisé pour délimité le script interprété par
awk, Le caractère'ne peux être utilisé directement dans ce dernier. Pour l'utiliser, il on peux utilisé la chaîne"'"'"'"ou bien"\047".
Quelques exemple de commandes avec awk :
| Manipulation | Syntaxe et exemple |
|---|---|
| Afficher le 2ème champ. | echo "a b c d" | awk '{print $2}'
b |
| Afficher les 2èmes et 4èmes champs. Attention : Les champs sont ainsi affichés sans séparateur de champs. | echo "a b c d" | awk '{print $2 $3}'
bd |
| Afficher le 2ème puis le 1er et enfin le 3ème champ. Attention : Les champs sont ainsi affichés sans séparateur de champs. | echo "a b c d" | awk '{print $2 $1 $3}'
bac |
Afficher le 2ème champ puis le 1er en les séparant par le caractère -. | echo "a b c d" | awk '{print $2 "-" $1}'
b-a |
| Afficher le dernier champ. | echo "a b c d" | awk '{print $NF}'
d |
| Afficher l'avant-dernier champ. | echo "a b c d" | awk '{print $(NF-1)}'
c |
Afficher le 2ème champ en définissant le séparateur de champ comme étant le caractère ;. | # Ecriture principale
echo "a b;c d" | awk 'BEGIN { FS = ";" } ; {print $2}'
c d
# Autre écriture possible
echo "a b;c d" | awk -F ";" '{print $2}'
c d |
| Afficher le 2ème caractère. En définissant le séparateur de champ par une chaîne vide, chaque caractère est alors défini comme un champ séparé des autres. | echo "ab;cd" | awk 'BEGIN { FS = "" } ; {print $2}'
b |
Des exemples bien plus complexes sont disponibles sur les sites suivants :
La commande sed
sed est un autre utilitaire de manipulation de chaîne de caractère et/ou de fichier texte.
Quelques exemple de commandes avec sed :
| Manipulation | Syntaxe et exemple |
|---|---|
Remplace toutes les occurrences du texte abc par xyz dans le fichier file.txt. | sed -i 's/abc/xyz/g' file.txt |
| Commente toutes les lignes d'un fichier. | sed -i 's/^/#/g' file.txt |
| Décommente toutes les lignes d'un fichier. | sed -i 's/^#//g' file.txt |
Discussion