Forum Programmation.shell Remplacement de chaine connues par leur position

Posté par  .
Étiquettes : aucune
0
8
déc.
2006
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  . Évalué à 0.

    Double post... pas bien ! Exemple en perl. Il doit y avoir plus rapide en python mais je ne connais pas bien le langage.

    ---------------------- 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  . Évalué à 1.

      merci pour ton aide , mais le debut de la chaine a disparu , en fait je dois garder la meme chaine , mais remplacé avec la nouvelle valeur à la position specifié.
      Codialement
    • [^] # Re: En perl

      Posté par  . Évalué à 1.

      man cut
    • [^] # Re: En perl

      Posté par  (site web personnel) . Évalué à 2.

      Il doit y avoir plus rapide en python
      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  . Évalué à 1.

      Désolé, erreur d'inattention.... La dernière partie devient :

      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  (site web personnel) . Évalué à 2.

    .. et maintenant voici comment procéder en programmation shell :

    chaine='aaaaaaaaa bb c bb i tot &&& $$'
    chaine_nv="${str::10}var${str:13}"
    echo $chaine_nv

    de rien.
  • # Remplacement de chaine connue par leur position

    Posté par  . Évalué à 1.

    Bonsoir à tous,
    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.