Remplacer une chaine de car variable dans un fichier

Résolu
tarek.benmohamed Messages postés 10 Statut Membre -  
tarek.benmohamed Messages postés 10 Statut Membre -
Bonjour,

Je souhaite remplacer dans un fichier la chaîne de car 1507 (position 40-44) par MT1507. Etant donné que la valeur de cette chaîne est variable je ne peux pas utiliser la commanda sed classique. (sed -i "s/201507/MT201507/" fichier)

Voici un exmple de la ligne de mon fichier :

0000 0001-01-01BDA 1507 M

Merci pour votre aide c'est urgent.

Cordialement,

2 réponses

  1. UnGars
     
    Salut,

    En fonction de l'exemple donné et les explications fournies :

    $ echo "0000 0001-01-01BDA 1507 M" | sed 's/.\{19\}/&MT/'
    0000 0001-01-01BDA MT1507 M
    0
  2. tarek.benmohamed Messages postés 10 Statut Membre
     
    Merci pour votre retour rapide.
    La commande fonctionne trés bien par contre ca me décale le reste de la ligne de 2 car.

    Résultat souhaité :
    000000000VELFR12919 *FZY90 0000 0001-01-01BDA MT1507 M +00000000300

    Résultat obtenu :
    000000000VELFR80769 *FZY90 0000 0001-01-01BDA MT1507 M +00000000300

    Y'a t-il un moyen de remplacer la chaîne sans décaler la suite de la ligne ?

    D'avance merci
    0
    1. UnGars
       
      Euh... en même temps c'est normal, puisqu'on rajoute 2 caractères à la ligne, non ? ;-\

      De plus, l'exemple fourni (souhaité/obtenu), s'il n'est pas mis entre balises codes (<code>Le code ici</code>) ne nous montre pas la réalité de la chose ;-(
      0
    2. tarek.benmohamed Messages postés 10 Statut Membre
       
      En fait l'idée consiste juste a remplacer la valeur "1507 blanc blanc" par MT1507 sans avoir à décaler la suite de la ligne.
      0
    3. UnGars > tarek.benmohamed Messages postés 10 Statut Membre
       
      echo "0000 0001-01-01BDA 1507  M" | sed 's/\(.\{19\}\)\([^ ]*\)  \(.*\)/\1MT\2\3/'
      0000 0001-01-01BDA MT1507M

      ou
       sed 's/\(.\{19\}\)\([^ ]*\)  /\1MT\2/'
      0
    4. tarek.benmohamed Messages postés 10 Statut Membre
       
      Merci ça marche maintenant.
      Une dernière question please : je souhaite insérer 4 blanc entre CPN et 2015-12-13 sur l'exemple suivant :

      302015-12-11CPN2015-12-13

      Mille merci
      0
    5. UnGars > tarek.benmohamed Messages postés 10 Statut Membre
       
      Si c'est le seul "CPN" de la ligne :
      $ echo "302015-12-11CPN2015-12-13" | sed 's/CPN/&    /'
      302015-12-11CPN 2015-12-13
      0