Souci avec cut et caractère de séparation
Bonjour à tout le monde,
Je suis nouveau sur le forum et je viens pour poser un petit problème que je n'arrive pas à résoudre.
J'ai préparé un script qui me permet, depuis un nom de fichier, de créer une ligne de commande. C'est tout simple, je récupère les différents paramètres de ma commande dans des champs séparés par le caractère _.
Par exemple un fichier :
maCommande_user=TOTO_date=20240214_fic=monFichier.txt
... me permet de lancer la commande :
maCommande user=TOTO date=20240214 fic=monFichier.txt
Rien de compliqué. On m'a demandé de pouvoir prendre en compte des variables qui pourraient contenir maintenant ce caractère de séparation "_".
Par exemple, si le user devient TOTO_1234, j'ai un fichier :
maCommande_user=TOTO_1234_date=20240214_fic=monFichier.txt
Dans ce cas là, mon script ne fonctionne plus car il génère :
maCommande user=TOTO 1234 date=20240214 fic=monFichier.txt
J'avais pensé faire ajouter un caractère d'échappement devant le _ du nom du fichier en pensant pouvoir ignorer le _ en trop. Par exemple :
maCommande_user=TOTO\_1234_date=20240214_fic=monFichier.txt
Mais je n'arrive pas à régler mon souci.
Avez-vous déjà été confrontés à ce genre de demande ? Auriez-vous des idées ?
J'utilise cut dans mon script pour l'instant, mais je veux bien utiliser autre chose (awk, sed) mais je ne suis pas expert en shell.
D'avance grand merci.
Olivier
- Souci avec cut et caractère de séparation
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Cap cut avis - Télécharger - Montage & Édition
- Caractere speciaux - Guide
- Caractere vide - Guide
2 réponses
Salut,
tant que tu n'auras pas un moyen discriminant de décider quel _ est le "vrai" séparateur, tu tourneras en rond.
Il faut revoir la génération des lignes en entrée de ton traitement.
Bonjour,
À moins qu'il s'agisse d'un exercice, j'ai un peu de mal à comprendre l'objectif, car ce que tu cherches à faire est ce qu'on appelle un alias, et ça existe dans la plupart des shells, en particulier bash.
# Définir un alias alias mon_alias="ls -a $HOME/Mes\ Documents" # Afficher les alias alias # Exécuter un alias mon_alias # Exécute ls -a $HOME/Mes\ Documents mon_alias $HOME # Exécute ls -a $HOME/Mes\ Documents $HOME
Comme tu peux le voir, le séparateur est directement espace, ce qui évite dans ton cas de substituer les "_" en espaces. On peut bien entendu échapper les espaces (comme le montre l'exemple ci-dessus), et de la même façon, échapper les \.
De deux choses l'une. Soit les alias répondent à ton besoin, soit en regardant comment les échappements marchent, tu pourras arranger ton programme en conséquence.
Mais garde-en tête qu'une fois que tu auras réglé tes problèmes d'échappements, d'autres besoins légitime, comme l'injection de variable shell dans la commande (cf $HOME dans mon exemple) t'obligera à réfléchir à l'opérateur $ (et plus généralement, tous les opérateurs shell). Bref, pourquoi réinventer la roue, vu que les alias semblent déjà répondre à ton besoin ;-)
Bonne chance