Awk : expression reguliere remplacer premiere occurence par sub

Résolu/Fermé
isidorus - 5 janv. 2013 à 09:36
 isidorus - 5 janv. 2013 à 10:22
Bonjour,

j'ai un fichier texte contenant par exemple :
lstt ction=15,ink=8,mardi=toto2457$ manip 1,2,3,ink=8,mardi=toto244,66
lstt ction=15,ink=b19,mardi=toto2457$ Support 1,3,ink=8,mardi=toto244,7


je souhaiterais remplacer ce qui est en gras par disons 'ink=12z88', ce qui devrait donner :
lstt ction=15,ink=12z88,mardi=toto2457$ manip 1,2,3,ink=8,mardi=toto244,66
lstt ction=15,ink=12z88,mardi=toto2457$ Support 1,3,ink=8,mardi=toto244,7


j'ai essayé :
awk ' { var=$0
        sub(/ink=.*,/, "ink=12z88,", var)
        print var } ' text

mais ça donne :
lstt ction=15,ink=33,7
lstt ction=15,ink=33,7



comment dois je m'y prendre ? sachant que je dois passer par awk, car ce n'est qu'une partie du code.

Merci

3 réponses

Utilisateur anonyme
5 janv. 2013 à 09:56
salut,

L'astérisque crée une regex gourmande: il va faire correspondre le motif jusqu'à la dernière limite (dans ton cas la dernière virgule)

ceci va fonctionner
sub(/ink=[^,]*/, "ink=12z88,", var)

Pourquoi ne divises-tu pas tes enregistrements en champs délimités par une virgule? tu n'aurais qu'à modifier le deuxième champ.
1
"Pourquoi ne divises-tu pas tes enregistrements en champs délimités par une virgule?"
parce que j'utilise déjà ';' pour FS
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
5 janv. 2013 à 10:00
hello
$ awk '{var=$0; sub("ink=[^,]*", "ink=12z88", var); print var}' fichier
lstt ction=15,ink=12z88,mardi=toto2457$ manip 1,2,3,ink=8,mardi=toto244,66
lstt ction=15,ink=12z88,mardi=toto2457$ Support 1,3,ink=8,mardi=toto244,7
$ 
1
Merci à tous les deux
0