Sed RE error: invalid repetition count(s)

leaiolia Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
dubcek Messages postés 18789 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

zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
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
leaiolia Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
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
leaiolia Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
salut,

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