Sed sur le nième caractère

Résolu
Errendir -  
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous,

j'ai une question avec sed.

J'ai besoin de remplacer le 19ème caractère d'un certaine ligne.
Est-ce possible avec sed ?

Plus généralement, peut-on remplacer le bloc compris entre le 18ème et le 25ème caractère (par exemple)

après avoir passé un bon bout de temps sur le forum, je n'ai pas trouvé la réponse.

je bosse avec Linux RedHat 5.4.

I need you please !!!

3 réponses

Errendir
 
merci beaucoup !!
à force de tester, je me rapprochais mais je n'aurais jamais trouvé.

Par contre, qu'y a-t-il en plus dans le paramètre r ?
1
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Ça évite de protéger les caractères (accolades et parenthèses) dans la regex, et aère un peu le tout ;-))
Voilà ce que ça donne sans :

sed  '4 s/\(.\{18\}\).\{7\}\(.*\)/\1 XXXXXX \2/' brol 
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Salut,

$ cat brol 
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz

$ sed -r '3 s/(.{18}).(.*)/\1 X \2/' brol 
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqr X tuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz

$ sed -r '4 s/(.{18}).{7}(.*)/\1 XXXXXX \2/' brol 
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqr XXXXXX z
abcdefghijklmnopqrstuvwxyz

$ 
0
Errendir
 
Encore merci !

mais pourquoi aucun exemple n'est écrit avec -r .....
C'est quand même hachement plus lisible !
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Peut être pour cause de portabilité, et d'autre part, si tu as des parenthèses, accolades ou autres caractères issus des regex étendues dans ton motif, tu devras les protéger pour qu'ils soient interprétés comme tel.
0