Path: csiph.com!weretis.net!feeder8.news.weretis.net!news.szaf.org!inka.de!mips.inka.de!.POSTED.localhost!not-for-mail From: Christian Weisgerber Newsgroups: fr.comp.os.unix Subject: Re: Shell : extraire d'une chaine plusieurs sous-chaines Date: Wed, 26 Nov 2025 21:58:32 -0000 (UTC) Message-ID: References: <10g4rbq$2i1$1@cabale.usenet-fr.net> <10g57g3$20kd$1@cabale.usenet-fr.net> <10g6mb9$16sl$1@cabale.usenet-fr.net> <10g6oq2$22rd$1@cabale.usenet-fr.net> <10g6t2f$n1i$1@cabale.usenet-fr.net> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Injection-Date: Wed, 26 Nov 2025 21:58:32 -0000 (UTC) Injection-Info: lorvorc.mips.inka.de; posting-host="localhost:::1"; logging-data="24895"; mail-complaints-to="usenet@mips.inka.de" User-Agent: slrn/1.0.3 (FreeBSD) Xref: csiph.com fr.comp.os.unix:8143 On 2025-11-26, Olivier Miakinen wrote: > J'ai trouvé : > > IFS=: read v1 v2 v3 v4 < $(echo $string | \ > perl -pe 's/^([a-z]+)([0-9])([a-z]*)([0-9]+)$/$1:$2:$3:$4/') > EOF Et là on s'approche de ma première réponse. Jusqu'ici ces solutions marchent avec quelconque shell POSIX. Mais si tu utilise le ksh, on peut se servir d'un co-processus. # lance le co-processus perl -pe '$|=1; s/^([a-z]+)([0-9])([a-z]*)([0-9]+)$/$1:$2:$3:$4/' |& # écris la chaine de caractères au co-processus et lis le résultat print -rp "$string" IFS=: read -rp v1 v2 v3 v4 # ç'a marché ? print "v1=$v1 v2=$v2 v3=$v3 v4=$v4" # le co-processus persiste, on peut lui parler encore print -rp "$string2" IFS=: read -rp w1 w2 w3 w4 (« $| = 1 » fait perl écrire une ligne de sortie immédiatement, sans tampon.) -- Christian "naddy" Weisgerber naddy@mips.inka.de