• # sed le glouton

    Posté par . En réponse au message echanger deux mots avec expression rationnelle. Évalué à 2.

    L'expression rationnelle doit "coller" au texte à modifier.
    Avec '\(toto\) \(titi\)', ce n'est pas le cas : ce qu'il y a entre '\(toto\)' et '\(titi\)', c'est-à-dire ' ' (un simple espace), ne peut pas correspondre pas à 'et '.

    Une solution possible : sed 's/\(toto\)\(.*\)\(titi\)/3円2円1円/'

    Oui mais... ton exemple est ambigü, et avec sed, ça donnera ça :
    titi et titi sont dans un bateau. toto tombe à l'eau.

    Pas certain que ce soit ce que tu veux. C'est parce que l'opérateur '*' est glouton (greedy en anglais). En perl, il y a l'opérateur '*?' pour avoir le comportement opposé. Je crois qu'il n'y a d'équivalent en sed, à moins d'écrire quelques horreurs comme :

    sed 's/\(toto\)\(\([^t]\|\(t\([^i]\|\(i\([^t]\|t[^i]\)\)\)\)\)*\)\(titi\)/8円2円1円/'