Remplacer une chaine de car variable dans un fichier

Résolu/Fermé
tarek.benmohamed Messages postés 10 Date d'inscription jeudi 14 janvier 2016 Statut Membre Dernière intervention 15 janvier 2016 - 14 janv. 2016 à 11:58
tarek.benmohamed Messages postés 10 Date d'inscription jeudi 14 janvier 2016 Statut Membre Dernière intervention 15 janvier 2016 - 15 janv. 2016 à 12:03
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

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 jeudi 14 janvier 2016 Statut Membre Dernière intervention 15 janvier 2016
14 janv. 2016 à 12:24
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
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 jeudi 14 janvier 2016 Statut Membre Dernière intervention 15 janvier 2016
14 janv. 2016 à 14:15
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 jeudi 14 janvier 2016 Statut Membre Dernière intervention 15 janvier 2016
14 janv. 2016 à 14:26
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 jeudi 14 janvier 2016 Statut Membre Dernière intervention 15 janvier 2016
14 janv. 2016 à 16:16
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 jeudi 14 janvier 2016 Statut Membre Dernière intervention 15 janvier 2016
14 janv. 2016 à 16:25
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