# Sélectionner une chaine de caractère dans un fichier

**URL:** <https://www.debian-fr.org/t/selectionner-une-chaine-de-caractere-dans-un-fichier/74235>\
**Category:** Programmation\
**Created:** [Août 18, 2017, 9:14 UTC](https://www.debian-fr.org/t/selectionner-une-chaine-de-caractere-dans-un-fichier/74235 "2017-08-18T21:14:23Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![arthanyx](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/7feea3/32.png) [@arthanyx](https://www.debian-fr.org/u/arthanyx)\
**Post date:** [Août 18, 2017, 9:14 UTC](https://www.debian-fr.org/t/selectionner-une-chaine-de-caractere-dans-un-fichier/74235/1 "2017-08-18T21:14:24Z")

</div>

Bonsoir,  
Je cherche (en vain) à récupérer une partie de texte dans un fichier mais je sèche pas mal.  
J’ai regardé du côté de grep, de sed, mais sans vraiment trop comprendre comment ça marche.  
J’ai cette expression régulière:  
`.*"IPAddress":"\(.*\)","Remo.*`  
à chercher et extraire dans une ligne dans un fichier.  
J’avais pensé à sed, mais je n’ai pas trouvé comment récupérer juste cette chaine, à chaque fois j’ai la ligne entière qui m’est renvoyée. Idem avec grep.  
Mieux, je cherche ce “masque” mais comme vous l’aurez compris cela correspond à une adresse ip qui peut être variable, et ce qui m’intéresse c’est l’IP elle même. Mais si je sais extraire `IPAddress":"111.222.333.444","Remo` je pense pouvoir ensuite extraire l’ip.  
Cela dit, si on peut me mettre directement sur la piste pour extraire l’ip ça m’intéresse aussi 😉  
Mais surtout j’aimerais bien comprendre comment on fait pour pouvoir le réutiliser ailleurs et parfaire mes connaissances.  
Merci à vous !

---

<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:** [Août 19, 2017, 5:15 UTC](https://www.debian-fr.org/t/selectionner-une-chaine-de-caractere-dans-un-fichier/74235/2 "2017-08-19T05:15:16Z")

</div>

à moins que je ne me trompe :

`egrep "IPAddress\(.*\)Remo" | awk -F'"' '{ print $3}'`

pas sûr à 100%, mais l’idée y est !

---

<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:** [Août 19, 2017, 8:16 UTC](https://www.debian-fr.org/t/selectionner-une-chaine-de-caractere-dans-un-fichier/74235/3 "2017-08-19T08:16:35Z")

</div>

l’idée y est, mais `grep | awk`, c’est redondant : `awk` sait traiter les regex !

---

<div class="post-metadata">

**Author:** ![dindoun](https://www.debian-fr.org/user_avatar/www.debian-fr.org/dindoun/32/4281_2.png) [@dindoun](https://www.debian-fr.org/u/dindoun)\
**Post date:** [Août 19, 2017, 12:46 UTC](https://www.debian-fr.org/t/selectionner-une-chaine-de-caractere-dans-un-fichier/74235/4 "2017-08-19T12:46:38Z")

</div>

salut  
pas compris  
quand tu dis : [quote=“arthanyx, post:1, topic:74235”]  
J’ai cette expression régulière:  
._“IPAddress”:"(._)","Remo.\*  
à chercher et extraire dans une ligne dans un fichier.  
[/quote]  
tu veux dire que ta chaine contient les caractères \ puis ( ou que tu veux utiliser cette expression ?

imaginons que tu as machintrucIPAddress:111.222.333.444,Remotrucmuch  
blahblahIPAddress:110.222.333.444,Remogabeuzomu

un `cat fichier |sed 's/.*IPAddress\:\(.*\),Remo.*/\1/'`

---

<div class="post-metadata">

**Author:** ![arthanyx](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/7feea3/32.png) [@arthanyx](https://www.debian-fr.org/u/arthanyx)\
**Post date:** [Août 19, 2017, 1:22 UTC](https://www.debian-fr.org/t/selectionner-une-chaine-de-caractere-dans-un-fichier/74235/5 "2017-08-19T13:22:17Z")

</div>

Bonjour,  
merci à vous pour vos réponse.  
Oui c’est exactement ça dindoun.  
La nuit portant conseil, j’ai fini par trouver la réponse à ma question après une étude un peu plus approfondie de sed.  
Donc je vous en fait part:  
`sed -e 's/.*IPAddress":"\(.*\)","Remo.*/\1/'`  
En fait c’était tout con, lors de mes premiers essais, l’heure tardive m’avait fait passer à côté à cause d’une coquille dans l’utilisation de sed que je ne maitrisais pas (ce qui est toujours le cas ^^)  
donc pour explication si ça intéresse quelqu’un (on sait jamais) qui n’est pas aguerri à l’utilisation de sed:  
-e = on va traiter une regex  
`s/ABC\(DEF\)G/WXYZ/\1/` = option de remplacement dans la ligne décomposé comme suit:  
ABCDEF= motif à rechercher  
WXYZ= motif de remplacement  
\1= sélection de la première occurrence entre parenthèses
