C'est con que tu te restreignes à bash... si tu avais choisi un shell normal tu aurais fait ça les doigts dans le nez!
Petit exemple avec un shell dont la première lettre est la dernière de l'alphabet:
On va dire que ton fichier est "t" et contient la chaine exact au dessus. Déja, on fait un coup de tr pour avoir la bonne syntaxe : aa=($(tr "{},:" " " < t))
Hop, on met ça dans un tableau. (Il y aurait moyen d'utiliser un tableau associatif mais j'ai pas réussi) : bb=${(z)aa}
On veut un champ? On cherche l'index de la clef, et on a la valeur au champ + 1 : print $bb[(($bb[(i)"sender"]+1))] "Jean Jean"
Dégageons ces guillements : print ${(Q)bb[(($bb[(i)"sender"]+1))]} Jean Jean
La clé "metadata" est particulière, il faut refaire le même traitement récursivement : md=(${(Qz)bb[(($bb[(i)"metadata"]+1))]})
Et on récupère le champ de la même manière : print $md[(($md[(i)email15]+1))] jean@reseau.loc9
Bluffant, non? Et le tout avec une syntaxe super claire! (bon ok je sors... et avant de sortir, j'avoue que ça déconne un peu du coté de homeStreet21 à cause des espaces... mais avec les bons flags il est peut être possible de corriger ça)
# D'un Z qui veut dire Zorroooooo!!!
Posté par calandoa . En réponse au message Récupérer des infos d'un fichier : parser.. Évalué à 2.
C'est con que tu te restreignes à bash... si tu avais choisi un shell normal tu aurais fait ça les doigts dans le nez!
Petit exemple avec un shell dont la première lettre est la dernière de l'alphabet:
On va dire que ton fichier est "t" et contient la chaine exact au dessus. Déja, on fait un coup de tr pour avoir la bonne syntaxe :
aa=($(tr "{},:" " " < t))Hop, on met ça dans un tableau. (Il y aurait moyen d'utiliser un tableau associatif mais j'ai pas réussi) :
bb=${(z)aa}On veut un champ? On cherche l'index de la clef, et on a la valeur au champ + 1 :
print $bb[(($bb[(i)"sender"]+1))]"Jean Jean"Dégageons ces guillements :
print ${(Q)bb[(($bb[(i)"sender"]+1))]}Jean JeanLa clé "metadata" est particulière, il faut refaire le même traitement récursivement :
md=(${(Qz)bb[(($bb[(i)"metadata"]+1))]})Et on récupère le champ de la même manière :
print $md[(($md[(i)email15]+1))]jean@reseau.loc9Bluffant, non? Et le tout avec une syntaxe super claire! (bon ok je sors... et avant de sortir, j'avoue que ça déconne un peu du coté de homeStreet21 à cause des espaces... mais avec les bons flags il est peut être possible de corriger ça)