====== Manipulations des chaînes de caractères ======
--- --- //[[nekan@shyrkasystem.com|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'' :
|< 100% 20% 50% 30% >|
^ 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}'' |Supprime les n premiers caractères. |echo ${TEXT: +2}
Ch|
| ''${TEXT:: +n}'' |Récupère 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 : [[https://man7.org/linux/man-pages/man1/awk.1p.html|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 :
* ''awk'' manipule 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.
* ''awk'' est un interpréteur de commandes. Son utilisation sera toujours de type ''awk '//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 ''$0'' correspond 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'' :
|< 100% 50% 50% >|
^ 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 :
* [[https://sites.google.com/site/diezone/awk-1/bou|getimax]]
* [[http://www.bruno-garcia.net/www/Unix/Docs/awk.html|Site de Bruno GARCIA]]
===== La commande sed =====
* [[http://manpagesfr.free.fr/man/man1/sed.1.html|Manuel de 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'' :
|< 100% 70% 30% >|
^ 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~~