Bruno Bonfils wrote:
Daniel, je te sens motivé pour commencer la section [1], qu'en penses tu ? :)
Bon, j'ai essayé de pondre un petit qqchose, mais ça me parait vraiment basique... Je vous laisse corriger (on sait jamais), reformuler (si besoin) et surtout ajouter... Je suis tombé hier sur un autre cas bizarre que j'ai dû contourner. Je n'ai plus l'exemple précis, mais en gros, c'était var=toto result="$(echo -e "titi\ntoto\ntutu" | sed -e '/$var/ !d')" le !d était interprêté (par la dernière commande de l'historique qui commence par d) et quoi que je fasse, le !d était toujours interprêté à cause des " extérieurs (indispensable pour que le $() soit exécuté. J'ai modifié mes commandes pour contourner le pb, et je me suis aperçu ensuite que l'on pouvait passer par une variable intermédiaire : var=toto exp="/$var"'/!d' result="$(echo -e "titi\ntoto\ntutu" | sed -e $exp)" Daniel PS: concernant sed, quelqu'un peut-il expliquer pourquoi les parenthèses capturantes doivent être échappées, sinon elles prennent le rôle du caractère parenthèse. En général, tous les caractères ayant un sens particulier dans les regexp doivent être échappés pour redevenir de "simples caractères". Dans sed aussi, sauf pour les parenthèses.
echo "un texte (entre parenthèses) avec aussi des 'apostrophes'."| sed -e 's/(/#/' un texte #entre parenthèses) avec aussi des 'apostrophes'. # la parenthèse est bien un caractère ordinaire
echo "un texte (entre parenthèses) avec aussi des 'apostrophes'."| sed -e "s/.*'\(.*\)'.*/\1/" apostrophes # elle capture si on l'échappe
Etonnant non ?