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