Souci avec cut et caractère de séparation

ode00333 Messages postés 1 Date d'inscription mercredi 14 février 2024 Statut Membre Dernière intervention 14 février 2024 - Modifié le 14 févr. 2024 à 14:34
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 14 févr. 2024 à 14:40

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

A voir également:

2 réponses

blux Messages postés 26013 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 26 avril 2024 3 289
14 févr. 2024 à 10:09

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.


0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
Modifié le 14 févr. 2024 à 14:42

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

0