[résolu] SED : Récupération de données

Bonjour,

J’essaye de récupérer une donnée précise dans une chaine de caractère grâce à la fonction sed, pour le moment sans succès, malgrés 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.

1 J'aime

Voici une option qui me paraît bien fonctionner :

$ echo "123456#44444#DD#12345#1#1#Z#" > fichier.txt
$ sed 's/[^#]\+#\([^#]\+\)#.\+/\1/' fichier.txt
44444
1 J'aime

Il est trop, trop, trop fort ce @anon96191775 :stuck_out_tongue:
Non, je ne suis pas en mode léchage de botte :wink:

Les regex c’est mon petit plaisir coupable de ces dernières années, je m’amuse beaucoup avec même si en réalité je les connais assez peu :wink:

Salut,

En plus court :
awk -F "#" '{print $2}' fichier.txt

Pas seulement plus court, c’est aussi beaucoup plus compréhensible :wink:

En effet !
Et, j’aurais même pu le donner … mais sa demande est SED !

Oui, on pourrait aussi faire encore plus économique, sans lancer aucun programme comme sed ou awk
rien qu’en utilisant l’interpréteur de commandes bash

Aha. Je ne m’attendais pas à avoir autant de réponses avec autant d’enthousiasme. Merci à tous pour vos retours, ça m’a été d’une grande utilité. A bientôt !

Avec bash c’est facile en effet :wink:

`̀``$ string=‘123456#44444#DD#12345#1#1#Z#’
$ string=${string##}
$ string=${string%%#
}
$ echo $string
44444```

1 J'aime

Eh, oui…

Mets des double-quotes, stp…
Ça fait partie des recommandations !

$ string="${string#*#}"
$ string="${string%%#*}"
$ echo "${string}"

:wink:

Sinon, tu fais du shell, même pas POSIX, et pas “beau” :stuck_out_tongue:
(rohhh, comment je le provoque, le @anon96191775)

Erreur, ce que j’ai posté ici est 100% POSIX :wink:

En fait le seul truc qui n’a pas un comportement normalisé par POSIX dans ces trois lignes c’est ‘echo’, qui gagnerait à être remplacé par un ‘printf’.

Bon, je te concède le point pour les double quotes tout de même :stuck_out_tongue_winking_eye:

Donc pas si “100%” que ça :wink:

en quoi ? pourquoi ?

1 J'aime

Le comportement du built-in echo n’est pas normalisé par la norme POSIX, et se comporte donc différemment selon les interpréteurs de shell utilisés.

Exemple 1 :

$ dash -c 'echo "1\n2"'
1
2
$ bash --posix -c 'echo "1\n2"'
1\n2

Exemple 2 :

$ dash -c 'echo -e "1\n2"'
-e 1
2
$ bash --posix -c 'echo -e "1\n2"'
1
2
1 J'aime