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円/'
# sed le glouton
Posté par lcld . En réponse au message echanger deux mots avec expression rationnelle. Évalué à 2.
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円/'