Afficher la pageAnciennes révisionsLiens de retourHaut de page Cette page est en lecture seule. Vous pouvez afficher le texte source, mais ne pourrez pas le modifier. Contactez votre administrateur si vous pensez qu'il s'agit d'une erreur. ====== Manipulations des chaînes de caractères ====== <label type="info">Création</label> --- --- //[[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 : <sxh bash>TEXT="Chaîne" # Manipulation pour mettre la chaîne de caractères en majuscule echo ${TEXT^^} # Retour CHAÎNE</sxh> 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. |<sxh bash>echo ${#TEXT} 6</sxh>| | ''${TEXT^^}'' |Mise en majuscule. |<sxh bash>echo ${TEXT^^} CHAÎNE</sxh>| | ''${TEXT,,}'' |Mise en minuscule. |<sxh bash>echo ${TEXT,,} chaîne</sxh>| | ''${TEXT: +n}'' |Supprime les n premiers caractères. |<sxh bash>echo ${TEXT: +2} Ch</sxh>| | ''${TEXT:: +n}'' |Récupère les n premiers caractères. |<sxh bash>echo ${TEXT:: +2} aîne</sxh>| | ''${TEXT: -n}'' |Récupère les n derniers caractères. |<sxh bash>echo ${TEXT: -2} ne</sxh>| | ''${TEXT:: -n}'' |Supprime les n derniers caractères. |<sxh bash>echo ${TEXT:: -2} Chaî</sxh>| | ''${TEXT:x}'' |Extraie tous les caractères à partir de l'index x sachant que le premier caractère est le n°0. |<sxh bash>echo ${TEXT:2} aîne</sxh>| | ''${TEXT:x:y}'' |Extraie les y caractères à partir de l'index x sachant que le premier caractère est le n°0. |<sxh bash>echo ${TEXT:2:3} aîn</sxh>| | ''${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. |<sxh bash>echo ${TEXT:2:-3} a</sxh>| | ''${TEXT/abc/xyz}'' |Remplace la première occurrence de ''abc'' par ''xyz''. |<sxh bash>echo ${TEXT/aî/i} Chine</sxh>| | ''${TEXT%%//%%abc/xyz}'' |Remplace toutes les occurrences de ''abc'' par ''xyz''. |<sxh bash>TEXT="Toto" echo ${TEXT//o/i} Titi</sxh>| | ''${TEXT/#abc/xyz}'' |Remplace ''abc'' par ''xyz'' si ''abc'' correspond aux premiers caractères de la chaîne. |<sxh bash>TEXT="anna" echo ${TEXT/#a/o} onna</sxh>| | ''${TEXT/%abc/xyz}'' |Remplace ''abc'' par ''xyz'' si ''abc'' correspond aux derniers caractères de la chaîne. |<sxh bash>TEXT="anna" echo ${TEXT/%a/o} anno</sxh>| | ''${TEXT<nowiki>%%[[</nowiki>:cntrl:]]}'' |Supprime les caractères de contrôle en fin de chaîne. |<sxh bash>TEXT="Test\r\n" echo ${TEXT%%[[:cntrl:]]} Test</sxh>| |||| ===== 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<sup>ème</sup> champ. |<sxh bash>echo "a b c d" | awk '{print $2}' b</sxh>| |Afficher les 2<sup>èmes</sup> et 4<sup>èmes</sup> champs. **Attention** : Les champs sont ainsi affichés sans séparateur de champs. |<sxh bash>echo "a b c d" | awk '{print $2 $3}' bd</sxh>| |Afficher le 2<sup>ème</sup> puis le 1<sup>er</sup> et enfin le 3<sup>ème</sup> champ. **Attention** : Les champs sont ainsi affichés sans séparateur de champs. |<sxh bash>echo "a b c d" | awk '{print $2 $1 $3}' bac</sxh>| |Afficher le 2<sup>ème</sup> champ puis le 1<sup>er</sup> en les séparant par le caractère ''-''. |<sxh bash>echo "a b c d" | awk '{print $2 "-" $1}' b-a</sxh>| |Afficher le dernier champ. |<sxh bash>echo "a b c d" | awk '{print $NF}' d</sxh>| |Afficher l'avant-dernier champ. |<sxh bash>echo "a b c d" | awk '{print $(NF-1)}' c</sxh>| |Afficher le 2<sup>ème</sup> champ en définissant le séparateur de champ comme étant le caractère '';''. |<sxh bash># 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</sxh>| |Afficher le 2<sup>ème</sup> 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. |<sxh bash>echo "ab;cd" | awk 'BEGIN { FS = "" } ; {print $2}' b</sxh>| 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//. |<sxh bash>sed -i 's/abc/xyz/g' file.txt</sxh>| |Commente toutes les lignes d'un fichier. |<sxh bash>sed -i 's/^/#/g' file.txt</sxh>| |Décommente toutes les lignes d'un fichier. |<sxh bash>sed -i 's/^#//g' file.txt</sxh>| ---- ~~DISCUSSION~~ bash_base_4.txt Dernière modification : 2022/06/13 15:24de nekan