Re: Manipulation de chaîne

Liste des GroupesRevenir à fcol configuration 
Sujet : Re: Manipulation de chaîne
De : lhh+news-no_spam (at) *nospam* free.fr.isnt.invalid (Jacques L'helgoualc'h)
Groupes : fr.comp.os.linux.configuration
Date : 22. May 2022, 00:12:06
Autres entêtes
Organisation : Aucune.
Message-ID : <slrnt8iotm.8pd.lhh+news-no_spam@hercule.home.arpa>
References : 1
User-Agent : slrn/1.0.3 (Linux)
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



Date Sujet#  Auteur
21 May 22 * Manipulation de chaîne4Olivier Miakinen
22 May 22 `* Re: Manipulation de chaîne3Jacques L'helgoualc'h
22 May 22  `* Re: Manipulation de chaîne2Olivier Miakinen
22 May 22   `- Re: Manipulation de chaîne1Jacques L'helgoualc'h

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal