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

**URL:** <https://www.debian-fr.org/t/resolu-sed-recuperation-de-donnees/73655>\
**Category:** Programmation\
**Created:** [Juin 9, 2017, 8:24 UTC](https://www.debian-fr.org/t/resolu-sed-recuperation-de-donnees/73655 "2017-06-09T08:24:20Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![FlorianGlt](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/a8b319/32.png) [@FlorianGlt](https://www.debian-fr.org/u/FlorianGlt)\
**Post date:** [Juin 9, 2017, 8:24 UTC](https://www.debian-fr.org/t/resolu-sed-recuperation-de-donnees/73655/1 "2017-06-09T08:24:21Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![anon96191775](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/71c47a/32.png) [@anon96191775](https://www.debian-fr.org/u/anon96191775)\
**Post date:** [Juin 9, 2017, 9:12 UTC](https://www.debian-fr.org/t/resolu-sed-recuperation-de-donnees/73655/2 "2017-06-09T09:12:21Z")

</div>

Voici une option qui me paraît bien fonctionner :

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

```

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Juin 9, 2017, 12:50 UTC](https://www.debian-fr.org/t/resolu-sed-recuperation-de-donnees/73655/3 "2017-06-09T12:50:54Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![anon96191775](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/71c47a/32.png) [@anon96191775](https://www.debian-fr.org/u/anon96191775)\
**Post date:** [Juin 9, 2017, 1:30 UTC](https://www.debian-fr.org/t/resolu-sed-recuperation-de-donnees/73655/4 "2017-06-09T13:30:42Z")

</div>

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 😉

---

<div class="post-metadata">

**Author:** ![lsam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/lsam/32/12965_2.png) [@lsam](https://www.debian-fr.org/u/lsam)\
**Post date:** [Juin 9, 2017, 1:42 UTC](https://www.debian-fr.org/t/resolu-sed-recuperation-de-donnees/73655/5 "2017-06-09T13:42:48Z")

</div>

Salut,

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

---

<div class="post-metadata">

**Author:** ![anon96191775](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/71c47a/32.png) [@anon96191775](https://www.debian-fr.org/u/anon96191775)\
**Post date:** [Juin 9, 2017, 1:45 UTC](https://www.debian-fr.org/t/resolu-sed-recuperation-de-donnees/73655/6 "2017-06-09T13:45:43Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Juin 9, 2017, 2:56 UTC](https://www.debian-fr.org/t/resolu-sed-recuperation-de-donnees/73655/7 "2017-06-09T14:56:17Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Juin 9, 2017, 3:34 UTC](https://www.debian-fr.org/t/resolu-sed-recuperation-de-donnees/73655/8 "2017-06-09T15:34:13Z")

</div>

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**

---

<div class="post-metadata">

**Author:** ![FlorianGlt](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/a8b319/32.png) [@FlorianGlt](https://www.debian-fr.org/u/FlorianGlt)\
**Post date:** [Juin 10, 2017, 10:41 UTC](https://www.debian-fr.org/t/resolu-sed-recuperation-de-donnees/73655/9 "2017-06-10T10:41:24Z")

</div>

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 !

---

<div class="post-metadata">

**Author:** ![anon96191775](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/71c47a/32.png) [@anon96191775](https://www.debian-fr.org/u/anon96191775)\
**Post date:** [Juin 12, 2017, 8:14 UTC](https://www.debian-fr.org/t/resolu-sed-recuperation-de-donnees/73655/10 "2017-06-12T08:14:26Z")

</div>

Avec bash c’est facile en effet 😉

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

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Juin 12, 2017, 10:50 UTC](https://www.debian-fr.org/t/resolu-sed-recuperation-de-donnees/73655/11 "2017-06-12T10:50:32Z")

</div>

Eh, oui…

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

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

```

😉

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

---

<div class="post-metadata">

**Author:** ![anon96191775](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/71c47a/32.png) [@anon96191775](https://www.debian-fr.org/u/anon96191775)\
**Post date:** [Juin 12, 2017, 1:30 UTC](https://www.debian-fr.org/t/resolu-sed-recuperation-de-donnees/73655/12 "2017-06-12T13:30:13Z")

</div>

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

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 😜

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Juin 12, 2017, 3:59 UTC](https://www.debian-fr.org/t/resolu-sed-recuperation-de-donnees/73655/13 "2017-06-12T15:59:04Z")

</div>

Donc pas si “100%” que ça 😉

---

<div class="post-metadata">

**Author:** ![Watael](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/w/a4c791/32.png) [@Watael](https://www.debian-fr.org/u/Watael)\
**Post date:** [Juin 12, 2017, 4:07 UTC](https://www.debian-fr.org/t/resolu-sed-recuperation-de-donnees/73655/14 "2017-06-12T16:07:47Z")

</div>

> [@anon96191775](#):
>
> le seul truc qui n’a pas un comportement normalisé par POSIX dans ces trois lignes c’est ‹&nbsp;echo&nbsp;›

en quoi ? pourquoi ?

---

<div class="post-metadata">

**Author:** ![anon96191775](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/71c47a/32.png) [@anon96191775](https://www.debian-fr.org/u/anon96191775)\
**Post date:** [Juin 12, 2017, 5:08 UTC](https://www.debian-fr.org/t/resolu-sed-recuperation-de-donnees/73655/15 "2017-06-12T17:08:26Z")

</div>

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 :

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

```

Exemple 2 :

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

```
