Awk : expression reguliere remplacer premiere occurence par sub

[Résolu/Fermé]
Signaler
-
 isidorus -
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


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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42674 internautes nous ont dit merci ce mois-ci

"Pourquoi ne divises-tu pas tes enregistrements en champs délimités par une virgule?"
parce que j'utilise déjà ';' pour FS
Messages postés
18260
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
20 septembre 2021
5 370
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

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42674 internautes nous ont dit merci ce mois-ci

Merci à tous les deux