Remplacer une chaine de car variable dans un fichier

Résolu
tarek.benmohamed Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   -  
tarek.benmohamed Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   -
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,


A voir également:

2 réponses

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
tarek.benmohamed Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
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
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
tarek.benmohamed Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
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
UnGars > tarek.benmohamed Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
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
tarek.benmohamed Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
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
UnGars > tarek.benmohamed Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
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