Sed sur le nième caractère

Résolu
Errendir -  
zipe31 Messages postés 34620 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

  1. 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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Ç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
  2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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
  3. Errendir
     
    Encore merci !

    mais pourquoi aucun exemple n'est écrit avec -r .....
    C'est quand même hachement plus lisible !
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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