Deutsch English Français Italiano |
<slrnt8iotm.8pd.lhh+news-no_spam@hercule.home.arpa> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail From: Jacques L'helgoualc'h <lhh+news-no_spam@free.fr.isnt.invalid> Newsgroups: fr.comp.os.linux.configuration Subject: Re: Manipulation de =?UTF-8?Q?cha=C3=AEne?= Date: Sat, 21 May 2022 22:12:06 -0000 (UTC) Organization: Aucune. Lines: 58 Message-ID: <slrnt8iotm.8pd.lhh+news-no_spam@hercule.home.arpa> References: <f399de3b-9165-3e25-50ed-80eea97e0e2e@miakinen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Date: Sat, 21 May 2022 22:12:06 -0000 (UTC) Injection-Info: reader02.eternal-september.org; posting-host="71f05b1e152aeb09f5c2c9a9eb1969e6"; logging-data="29767"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19xwQcmfv99HMpx2Um8hUfs" User-Agent: slrn/1.0.3 (Linux) Cancel-Lock: sha1:FFy4Xw4v++kNKDLsjwaenfKTf20= Bytes: 3030 Le 21-05-2022, Olivier Miakinen a écrit : > [diapublication, suivi modifiable si nécessaire] > > Bonjour, Bonsoir, > Préambule : > Ma question porte sur le kornshell (ksh) sur une machine GNU/Linux, > mais selon que la réponse utilise une builtin du shell ou une commande > externe, elle sera peut-être plus en charte sur fclr, voire un autre > groupe, plutôt que sur fcolc où j'ai placé le suivi. Répondez là où > ça vous semble le mieux ! (Merci.) > > Dans un ksh j'ai une variable qui contient quatre chiffres ou plus, par > exemple "314159". Je voudrais obtenir une autre variable dans laquelle > les trois premiers chiffres sont suivis chacun de la séquence "\.". > > "314159" -> "3\.1\.4\.159" > "1234" -> "1\.2\.3\.4" > "123456789" -> "1\.2\.3\.456789" > > Bien sûr je pourrais écrire "${v:0:1}\.${v:1:1}\.${v:2:1}\.${v:3}", mais > y a-t-il plus simple ? $ echo 2718281828459045 | \ sed -nre '/^[0-9]+$/!{s/^/Fuck /p;q};:x;s/([0-9])([0-9])/\1\\.\2/;/(\\\.[0-9]){3}/{p;q};bx' 2\.7\.1\.8281828459045 Sans le contrôle initial, plus simple : sed -nre ':x;s/([0-9])([0-9])/\1\\.\2/;/\\\..\\\..\\\./{p;q};bx' Il faudrait insérer un « /[0-9][0-9]/!{p;Q} », ou modifier le test initial, si tu es assez pervers pour essayer un nombre de moins de 4 chiffres :) > P.-S. : J'ai la même question, mais pour le cas où chaque chiffre (sauf > éventuellement le dernier) doit être suivi de la séquence. $ echo 2718281828459045 | \ sed -nre ':x;s/([0-9])([0-9])/\1\\.\2/g;tx;p;q' 2\.7\.1\.8\.2\.8\.1\.8\.2\.8\.4\.5\.9\.0\.4\.5 Il faut deux passes du s///g d'insertion (ou accepter/supprimer un point final) : $ echo 2718281828459045 | \ sed -nre ':x;s/([0-9])([0-9])/\1\\.\2/gp;tx;q' 2\.71\.82\.81\.82\.84\.59\.04\.5 2\.7\.1\.8\.2\.8\.1\.8\.2\.8\.4\.5\.9\.0\.4\.5 Le plus simple : echo 2718281828459045 |sed -e 's/[0-9]/&\\./g;s/\\.$//' 2\.7\.1\.8\.2\.8\.1\.8\.2\.8\.4\.5\.9\.0\.4\.5