Bonjour,
Voici comment j’ai résolu le problème suivant
j’utilise l’ alias «bouchetrous» suivant:
alias bouchetrous="rename 's/[,\s]/_/g' "
qui remplace les blancs et les virgules par un souligné : « _ »
Problème:
comment ajouter l’ apostrophe «’»?
alias bouchetrous="rename 's/[\',\s]/_/g' "
renvoie une erreur
si je supprime les «’» de l’argument de rename, ça marche mais les blancs ne sont plus reconnus, (même si je remplace le « \s » par un espace.) Dans ce cas aucune erreur n’est affichée, mais les blancs ne sont pas remplacés.
Il y a bien d’autres solutions, comme detox, ou l’utilisation d’une fonction qui ferait successivement les 2 types de remplacement, mais ma paresse mal négociée se cache derrière ma curiosité.
La complexité des jeux d’apostrophes ( ’ ) et de guillemets ( " ) imbriqués avec bash me dépasse encore.
Comment j’ai trouvé la solution:
La commande en ligne suivante fait le travail:
rename "s/[\'\s,]/_/g"
Finalement, la solution est:
alias bouchetrous="rename \"s/[\'\s,]/_/g\" "
Mon explication (corrigez-moi si je me trompe SVP):
La définition d’alias nécessite soit des apostrophes soit des guillemets (si des termes doivent être interprétés).
La liste des argument du script Perl « rename » doit être protégée d’interprétations de bash, si possible par des apostrophes.
Le regroupement dans une regex Perl entre [crochets droits] peut utiliser l’apostrophe comme simple caractère à condition qu’il soit échappé. Bref ce casse-tête a tout de même une solution.
On peut échapper les guillemets dans des guillemets, pas des apostrophes dans les apostrophes, car bash interprète ce qui est entre guillemets, pas ce qui est entre apostrophe.
Une poupée russe à 3 niveaux:
1 bash (définition d’alias), puis
2 bash (lancement de rename par l’alias), puis
3 Perl (script « rename »).