Addition (+)

Bonjour,

je bloque sur l'une des notion basique d'unix c 'est les operateurs arithmetiques

voici un bout du code:

hexapost_seq=$(sed -n '1 s/.*=\(.*\)/\1/p' $mediapost)
hexapost_seq_maj=`expr $hexapost_seq + 1`
`sed "/HEXAPOST_SEQ/ s/:digit:/${hexapost_seq_maj}/" $mediapost>fich.tmp && mv -f fich.tmp $mediapost`

dans mon fichier hexapost_seq=12

quand j'execute pour la premiere fois j'obtiens
hexapost_seq=132

et quand j'execute pour la deuxième fois j'obtiens:
hexapost_seq=13332

et j'arrive pas à voir ou est l'erreur

merci d'avance pour votre aide

8 réponses

  1. Modérateur
    Salut,

    Remplace :
    s/[ [:digit:]]/${hexapost_seq_maj}/
    par :
    s/[0-9]\+/${hexapost_seq_maj}/
    et ça devrait le faire ;-))
    0
    1. salut jipicy

      j'ai modifié la ligne de commande comme vous m'avez expliqué.

      je met dans mon fichier

      hexapost_seq=13

      et j'execute et il m'affiche 14 donc ça marche mais le script ne modifie plus le fichier normalement il doit remplacer 13 par 14 dans le fichier mediapost

      merci pour votre aide
      0
  2. Modérateur
    Ben si ça marchait avant, ça devrait marcher aussi, je n'ai modifié que la syntaxe de "sed", pas le reste (redirection et syntaxe bash).

    Quelle version de "sed" ? Si supérieure à 4.0.5 il existe l'option "-i" qui modifie le fichier directement...
    0
    1. Oui normalement ça doit marcher peut etre que j'ai touché à quelque chose

      je peux pas utiliser l'option "-i"

      ci dessous un bout du script

      #!/usr/bin/ksh

      path_file_mediapost=../fichier_maj

      mediapost=$path_file_mediapost/mediapost.txt

      hexapost_seq=$(sed -n '1 s/.*=\(.*\)/\1/p' $mediapost)

      hexapost_seq_maj=`expr $hexapost_seq + 1`

      echo $hexapost_seq
      echo $hexapost_seq_maj

      `sed "/HEXAPOST_SEQ/ s/[0-9]\+/${hexapost_seq_maj}/" $mediapost>fich.tmp && mv -f fich.tmp $mediapost`
      0
      1. bonjour

        up puisque je bloque toujours

        merci
        0
        1. Modérateur
          Et sans la redirection dans un fichier, est-ce que l'affichage à l'écran donne le résultat espéré ?
          0
          1. salut
            non, on m'affiche un message d'erreur : sed : Function HEXAPOST_SEQ/ s/[0-9]\+/14/ cannot be parsed
            0
            1. Modérateur
              Alors essaie avec cette syntaxe alors :
              s/[0-9][0-9]*/$var/
              ;-))
              0
              1. ça marche

                merci de me sauver la vie à quaque fois :)
                0