#1 Le 09/06/2017, à 09:31
- FlorianGlt
SED : Récupération de données
Bonjour,
J'essaye de récupérer une donnée précise dans une chaîne de caractère grâce à la fonction sed, pour le moment sans succès, malgré mes différentes recherches sur Internet.
123456#44444#DD#12345#1#1#Z#
Je souhaite récupérer les valeurs entre les deux premiers dièses (dans cet exemple 44444).
Si je fais "cat fichier.txt | sed -n "/[0-9]#[0-9]#DD#.*#/p" ça me retourne effectivement les lignes correspondantes. Cependant je n'arrive toujours pas a trouver la solution pour récupérer la chaîné souhaitée.
J'ai essayé entre autre "cat fichier.txt | sed -n "/[0-9]#([0-9])#DD#.#/p" ou bien "cat fichier.txt | sed -n "/[0-9]#([0-9])#DD#.#/\1/p".
Une suggestion ?
En vous remerciant tous par avance,
Florian.
Hors ligne
#2 Le 09/06/2017, à 09:41
- pingouinux
Re : SED : Récupération de données
Bonjour,
$ sed -nr "s/[^#]+#([^#]+)#.*/\1/p" <<<"123456#44444#DD#12345#1#1#Z#"
44444
Ajouté :
Et pour prévoir le cas où aucun caractère ne précède le premier # :
$ sed -nr "s/[^#]*#([^#]+)#.*/\1/p" <<<"#44444#DD#12345#1#1#Z#"
44444
Dernière modification par pingouinux (Le 09/06/2017, à 09:47)
Hors ligne
#3 Le 09/06/2017, à 13:24
- Hackedia
Re : SED : Récupération de données
Bonjour,
Je ne connais pas le contexte mais je connais une fonction qui est plus intéressante dans ton cas, ça s'appelle le ParameterExpansion, à l'inverse de SED qui lance un daemon pour exécuter la commande, ici le parameter expansion est directement interprété par le shell.
Dans ton cas le parameter expansion donnerai :
var="123456#44444#DD#12345#1#1#Z#"; var=${var#*#}; echo ${var%%#*}
Chaque regex va venir couper une partie de la chaine.
Le #*# signifie :
1ier #* : Partir du début jusqu'au premier charactère suivant
2iem # : Le charactère à prendre en compte (ici un dieze)
Et le %%#* signifie : Partir de la fin jusqu'au dernier dièze
C'est une approche différente avec une écriture différente du regex, j'essaye de l'utiliser le plus possible, c'est plus "greenIT" ^^,
Dernière modification par Hackedia (Le 09/06/2017, à 13:26)
Hors ligne