Re: utilisation de la fonction sleep dans un batch et séparateur décimale

MulX (Aymeric) os2mule at gmail.com
Mar 8 Sep 20:56:18 UTC 2009


patrick a écrit :
> Bonjour,
>
> Je cherche un moyen de changer le séparateur décimal dans
> l'utilisation de la fonction sleep.
> Par défaut si on veut faire un sleep de 0,1 seconde il faut taper
> "sleep 0.1", je fais une migration de script batch depuis un debian
> Woody vers un Ubuntu 9.4 et sous Debian Woody j'utilisais une virgule
> comme séparateur décimal après avoir fixé la variable LC_NUMERIC=fr_FR.
> Avec Ubuntu 9.4 je n'ai pas réussi à remplacer le point par la virgule
> pour l'utilisation de la fonction sleep.
>
> La commande locale donne :
> LANG=fr_FR.UTF-8
> LC_CTYPE="fr_FR.UTF-8"
> LC_NUMERIC="fr_FR.UTF-8"
> LC_TIME="fr_FR.UTF-8"
> LC_COLLATE="fr_FR.UTF-8"
> LC_MONETARY="fr_FR.UTF-8"
> LC_MESSAGES="fr_FR.UTF-8"
> LC_PAPER="fr_FR.UTF-8"
> LC_NAME="fr_FR.UTF-8"
> LC_ADDRESS="fr_FR.UTF-8"
> LC_TELEPHONE="fr_FR.UTF-8"
> LC_MEASUREMENT="fr_FR.UTF-8"
> LC_IDENTIFICATION="fr_FR.UTF-8"
> LC_ALL=
>
> J'ai cherché un peu partout sans trouver de solution, avez vous une
> piste ?
>
> Merci
>
> Patrick 
(j'ai quelques problèmes de messagerie :/ )

A priori mon premier message est parti avant que j'ai eu le temps de le
finir
Voici donc l'expression régulière :

sed -e '/^sleep *\,*/ s \([0-9]\)\?,\([0-9]\) \1.\2 '


Voici un exemple :
echo "foo.bar"
sleep 1,2
sleep 11,25
sleep 2,4s
sleep .2
sleep ,6
echo sleep 1,2
echo "bar,foo"

Après execution de la commande sed :

echo "foo.bar"
sleep 1.2
sleep 11.25
sleep 2.4s
sleep .2
sleep .6
echo sleep 1,2
echo "bar,foo"


Remarque j'ai utilisé l'espace comme séparateur de la commande sed pour
y voir plus clair.
Expliqué simplement on selectionne pour les lignes qui commence par
sleep, tout les chiffres avant la ',' et tout ce qui est après.
Chaque morceaux est mémorisé puis on remet le premier.second

En écrivant je me dit qu'il y a peut être plus simple, remplacer la ,
par un . pour les lignes qui commence par sleep .... (sed -e '/^sleep
*,*/ s , . g')

Enfin bref ça m'a fait réviser les expressions régulières ^^

Si tu souhaite l'utiliser un ensemble de fichier (qui on va supposer
finissent par .sh)

for fichier  in *.sh
do
sed -e '/^sleep *\,*/ s \([0-9]\)\?,\([0-9]\) \1.\2 ' -i "$fichier"
done

Voilà.

-- 
MulX, alias os2mule. (IRL: Aymeric)
WWW : http://www.aplu.fr ; Jabber : mulx at jabber.fr
Merci d'eviter le "Top posting" !

Preuve est faite que visage dévot et pieuses actions nous servent à enrober de sucre le diable lui même.





Plus d'informations sur la liste de diffusion ubuntu-fr