Sed sur le nième caractère

Résolu/Fermé
Errendir - 23 nov. 2011 à 16:51
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 23 nov. 2011 à 17:50
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

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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
23 nov. 2011 à 17:35
Ç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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
23 nov. 2011 à 17:11
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
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
23 nov. 2011 à 17:50
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