Sed RE error: invalid repetition count(s)

leaiolia Messages postés 3 Statut Membre -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
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. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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 ;-)
    0
  2. leaiolia Messages postés 3 Statut Membre
     
    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.
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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...
      0
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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.
      0
    3. leaiolia Messages postés 3 Statut Membre
       
      salut,

      je suis sous MAC, au travail c est de l AIX 6.1
      0
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    et avec awk
    $ printf "%.sa" {1..512} | awk '{print substr($1, 1, 500) 110002 substr($1, 507)}'
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa110002aaaaaa
    $
    0