Bonsoir à tous .
comme je suis débutant en shell, j'ai un ptit souci . Mon probleme consiste à remplacer dans une ligne de fichier , des chaines de caracteres connues par leurs position, par de nouvelles valeurs.
exemple : chaine ="aaaaaaaaa bb c bb i tot &&& $$ " , je veux remplacer la chaine contenue dans la position 10 à 13 par une valeur var.
nouvelle chaine =aaaaaaaaa varc bb i tot &&& $$ "
# En perl
Posté par omnikron . Évalué à 0.
---------------------- SCRIPT PERL -----------------
#!/usr/bin/perl
my $inStr = "aaaaaaaaa bb c bb i tot &&& \$\$";
my $pos1 = 10;
my $pos2 = 13;
my $replace = "var";
my $out = substr($inStr, $pos1, $pos2-$pos1);
$out .= $replace;
$out .= substr($inStr, $pos2, length($inStr));
print $out."\n";
-------------------------------------------------------------
$ ./zeScript.pl
bb varc bb i tot &&& $$
[^] # Re: En perl
Posté par loic_1174 . Évalué à 1.
Codialement
[^] # Re: En perl
Posté par Cook Captain . Évalué à 1.
[^] # Re: En perl
Posté par cho7 (site web personnel) . Évalué à 2.
Sans chercher de technique particulière, je propose ca :
def remplace(chaine,positiondebut,mot):
tmp = chaine[0:positiondebut]
tmp += mot
tmp += chaine[positiondebut+len(mot):]
return tmp
chaine = "aaaaaaaaa bb c bb i tot &&& $$"
nouvellechaine = remplace(chaine,10,"var")
print chaine
print nouvellechaine
Mais c'est plus de la programmation shell, mais de la programmation python... Et j'ai du mal à saisir l'interêt de la chose...
[^] # Re: En perl
Posté par omnikron . Évalué à 1.
my $out = substr($inStr, 0, $pos1);
$out .= substr($inStr, $pos1, $pos2-$pos1);
$out .= $replace;
$out .= substr($inStr, $pos2, length($inStr));
Là ça doit être bon. Ça revient au poste de cho7.
# merci les trolleurs perliens HS...
Posté par foulmetal canette (site web personnel) . Évalué à 2.
chaine='aaaaaaaaa bb c bb i tot &&& $$'
chaine_nv="${str::10}var${str:13}"
echo $chaine_nv
de rien.
[^] # Re: merci les trolleurs perliens HS...
Posté par cho7 (site web personnel) . Évalué à 2.
chaine='aaaaaaaaa bb c bb i tot &&& $$'
chaine_nv="${chaine::10}var${chaine:13}"
echo $chaine_nv
de rien.
# Remplacement de chaine connue par leur position
Posté par loic_1174 . Évalué à 1.
j'ai testé les differentes propositions postés sur ce forum concernant la susbsitution de chianes connues par leur position .
Or le probléme c'est que je travaille sous AIX ,et la solution consistant à utiliser cette ligne
${inStr::119}"$varpos1"${inStr:128}" pour remplacer la chaine qui occupe de la 119 ---> 128 par la valeur de $varpos1 ne marche pas.
Si quelqu'un a une autre solution, je suis preneur .
Cordialement
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.