Bash : Traitement sur les chaînes
Longueur et sélection d'une chaîne
Comme Bash permet d'avoir le résultat d'une commande externe facilement, on peut avoir accès à un nombre étonnament grand d'opérations diverses à faire pour manipuler des chaînes. On va se contenter ici des opération natives et laisserons de côté les expr, sed, grep...
Longueur
On peut avoir la longueur d'une chaîne avec la syntaxe ${#variable} :
BASH $> varNom="John O'Daly" BASH $> echo ${#varNom} 11 BASH $>
Position et longueur
On peut extraire un morceau de chaîne un peu à la manière de Python avec l'expression ${variable:position:[longueur]}. La longueur est optionnelle : si on ne la précise pas, l'extraction se fera jusqu'à la fin de la chaîne. La position de départ peut être négative, et dans ce cas l'extraction se fera à partir de la fin (comme en Python...).
BASH $> varNomFichier="20160405_ERR_application.log" BASH $> echo ${varNomFichier:9:15} ERR_application BASH $> echo ${varNomFichier:9} ERR_application.log BASH $> echo ${varNomFichier:(-4)} .log
Extraction de chaînes
En enlevant des caractères au début ou à la fin
Il est possible de supprimer à partir du début d'une chaîne la plus petite ${variable#critère} ou la plus grande ${variable##critère} occurrence d'un critère de recherche. L'utilisation du symbole joker * permet de faire la recherche sur une suite de caractère non définis.
BASH $> varNomFichier="20160405_ERR_application.log" BASH $> echo ${varNomFichier#20160405_} ERR_application.log BASH $> echo ${varNomFichier#*_} ERR_application.log BASH $> echo ${varNomFichier#*ERR_} application.log BASH $> echo ${varNomFichier##*_} application.log
Il est possible de supprimer à partir de la fin d'une chaîne la plus petite ${variable%critère} ou la plus grande ${variable%%critère} occurrence d'un critère de recherche. L'utilisation du symbole * permet de faire la recherche sur une suite de caractère non définis.
BASH $> varNomFichier="20160405_ERR_application.log" BASH $> echo ${varNomFichier%.log} 20160405_ERR_application BASH $> echo ${varNomFichier%.*} 20160405_ERR_application BASH $> echo ${varNomFichier%%_*} 20160405 BASH $>
Recherche et remplacement
Remplacement basique d'une chaîne par une autre
On peut remplacer une ( ${/variable/recherche/remplace} ou plusieurs ( ${variable//recherche/remplace}) occurences d'une chaîne recherchée. Si on laisse vide la chaîne de remplacement, cela équivaut à la supprimer.
BASH $> varNomFichier="mon fichier save du jour.save" BASH $> echo ${varNomFichier/ /_} mon_fichier save du jour.save BASH $> echo ${varNomFichier// /_} mon_fichier_save_du_jour.save BASH $> echo ${varNomFichier//save/log} mon fichier log du jour.log BASH $> echo ${varNomFichier//save/} mon fichier du jour. BASH $>
Remplacement avancé
On peut aussi combiner les critères de recherches avec des expressions, des extractions en début ou en fin de chaîne; le critère de remplacement peut lui aussi être une expression.
BASH $> varNomFichier="mon fichier save du jour.save" BASH $> echo ${varNomFichier/m*r/20160809} 20160809.save BASH $> echo ${varNomFichier/#*du/$(date +'%Y%m%d')} 20160809 jour.save BASH $> echo ${varNomFichier/%save/log} mon fichier save du jour.log