Awk : expression reguliere remplacer premiere occurence par sub

Résolu
isidorus -  
 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

  1. Utilisateur anonyme
     
    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
    1. isidorus
       
      "Pourquoi ne divises-tu pas tes enregistrements en champs délimités par une virgule?"
      parce que j'utilise déjà ';' pour FS
      0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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