Sed RE error: invalid repetition count(s)

Bonjour,

je souhaite utiliser la meme expression afin de substituer une chaine qui se trouve a plus que 255 nieme caractaires dans une ligne.

sed 's/\(.\{18\}\).\{8\}\(.*\)/\1'$cmp'\2/' tmp >> tmpout
ca marche
par contre
sed 's/\(.\{940\}\).\{8\}\(.*\)/\1'$cmp'\2/' tmp >> tmpout
error:
sed: 1: "s/\(.\{930\}\).\{8\}\(. ...": RE error: invalid repetition count(s)

Merci d avance pour vos suggestions.

3 réponses

  1. Contributeur
    Salut,

    On peut avoir un aperçu de la ligne matchée ainsi que de la commande réelle employée et du message d'erreur (copier/coller depuis le shell ? Merci ;-)
    1. merci pour votre retour,

      voici la contenu de la variable
      cmp=10000000

      si j execute la commande suivant sur un fichier contenant des 1600 caractaires par ligne

      exemple :
      $ cat hhh |wc -c
      450

      sed 's/\(.\{18\}\).\{6\}\(.*\)/\110002\2/' hhh
      aaaaaaaaaaaaaaaaaa10002aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

      2 eme exemple $ sed 's/\(.\{200\}\).\{6\}\(.*\)/\110002\2/' hhh
      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa10002aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

      3 eme exemple : $ sed 's/\(.\{259\}\).\{6\}\(.*\)/\110002\2/' hhh
      sed: 1: "s/\(.\{259\}\).\{6\}\(. ...": RE error: invalid repetition count(s)

      y a il une variable a seter afin d augmenter le buffer de sed ?? car j ai l impression que ca donne un buffer overflow !!

      Merci d avance.
      1. Contributeur
        Chez moi ça marche bien quel que soit la place choisie ;-\

        $ sed 's/\(.\{440\}\).\{6\}\(.*\)/\110002\2/' plop 
        aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa10002aa


        Quel système ? GNU/Linux ? UNIX ?
        Quelle version de sed ?

        Pour le buffer, il existe une option :
         -u, --unbuffered
        
        load  minimal  amounts  of data from the input files and flush the output buffers more often

        A tester...
      2. Contributeur
        En jetant un oeil à "info sed" on trouve :
        5 GNU 'sed''s Limitations and Non-limitations
        *********************************************
        
        For those who want to write portable 'sed' scripts, be aware that some
        implementations have been known to limit line lengths (for the pattern
        and hold spaces) to be no more than 4000 bytes.  The POSIX standard
        specifies that conforming 'sed' implementations shall support at least
        8192 byte line lengths.  GNU 'sed' has no built-in limit on line length;
        as long as it can 'malloc()' more (virtual) memory, you can feed or
        construct lines as long as you like.
        
           However, recursion is used to handle subpatterns and indefinite
        repetition.  This means that the available stack space may limit the
        size of the buffer that can be processed by certain patterns.
      3. salut,

        je suis sous MAC, au travail c est de l AIX 6.1
    2. Contributeur
      hello
      et avec awk
      $ printf "%.sa" {1..512} | awk '{print substr($1, 1, 500) 110002 substr($1, 507)}'
      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa110002aaaaaa
      $