OVH Cloud OVH Cloud

sed : substituer a un nombre une repetition

3 réponses
Avatar
JGP_NoMail
Bonjour,


Je n'ai pas trouvé pour repeter un remplacement.


Je cherche a faire quelque chose comme remplacer "toto" par n fois ti.

la commande
sed -n "s/toto/ti\{3\}/p
ne devrait elle pas remplacer la chaine "toto" par "tititi" ?

merci pour vos réponses.



--

3 réponses

Avatar
Stephane CHAZELAS
Le Wed, 24 Sep 2003 18:51:08 +0200, JGP_NoMail écrivait :
[...]
la commande
sed -n "s/toto/ti{3}/p
ne devrait elle pas remplacer la chaine "toto" par "tititi" ?



Non {3... est un truc de regexp et veux dire matche 3 occurence
de la precedente regexp.

perl -ne'print if s/toto/{"ti" x 3}/e'

ou

awk 'BEGIN{for(i=0;i<3;i++)nti=nti"ti"}sub(/toto/,nti)'

--
Stéphane

Avatar
JGP_NoMail
"Stephane CHAZELAS" a écrit dans le message
news:
Le Wed, 24 Sep 2003 18:51:08 +0200, JGP_NoMail
écrivait :

[...]
la commande
sed -n "s/toto/ti{3}/p
ne devrait elle pas remplacer la chaine "toto" par "tititi" ?



Non {3... est un truc de regexp et veux dire matche 3 occurence
de la precedente regexp.


Dommage de ne pouvoir l'utiliser pour le remplacement
en fait, je voulais faire :
sed -n "s/toto([0-9])/;{1}/p

c'est a dire changer "toto n" par n*; (creer un fichier CSV)



perl -ne'print if s/toto/{"ti" x 3}/e'


il me va falloir apprendre perl
j'ai essayé : perl -ne'print if s/toto([0-9])/{"ti" x 1}/e'
mais cela ne semble pas fonctionner



ou

awk 'BEGIN{for(i=0;i<3;i++)nti=nti"ti"}sub(/toto/,nti)'


ou awk


enfin, merci pour la réponse


--
Stéphane



Avatar
Stephane CHAZELAS
Le Thu, 25 Sep 2003 19:22:14 +0200, JGP_NoMail écrivait :
[...]
Dommage de ne pouvoir l'utiliser pour le remplacement
en fait, je voulais faire :
sed -n "s/toto([0-9])/;{1}/p

c'est a dire changer "toto n" par n*; (creer un fichier CSV)
[...]

j'ai essayé : perl -ne'print if s/toto([0-9])/{"ti" x 1}/e'
mais cela ne semble pas fonctionner


perl -ne'print if s/toto([0-9])/";" . "ti" x $1/e'

ou

sed -ne '/toto[0-9]/{h;s/$/9876543210/;s/toto([0-9]).*1/
/;s/.*n//;s/./ti/g;H;g;s/toto[0-9](.*)n(.*)/;21/;p;}'

--
Stéphane