re, je réponds dans le désordre ... mais c'est pour être le plus clair possible.
Mon pb est de comprendre quand le \ signifie "échapper le caractère qui suit" et quand il signifie "caractère backslash.
l'utilisation du \ en sed est en fait plus deductible que dans bien des moteurs mai aussi tellement plus chiante à l'écriture! Il y a deux règles: Lorsque je suis dans un contexte de description du motif ( hors de [], donc), tous les caractères qui ont une signification pour le moteur est protégé (a l'exception de *). Ainsi \( ouvre une capture et ( est le symbole (. Lorsque je suis dans un contexte d'une définition de métacaractère (dans [], donc), il n'existe plus que 2 caractères spéciaux. * ] qui ferme la définition du métacaractère * - qui est le séparateur entre 2 extrémités d'une suite ( a-z ) Ces caractères perdent leur signification si ils sont placés de telle facon que leur utilisation *en temps que caractère spécial* est un non-sens (oui, je reviens avec ca!). le \ est donc inutile. donc je reprend mes exemples et j'en ajoute un: * [] quel intéret de déclarer un metacaractère vide? Aucun? donc le ] est un simple symbole.
[a-z] < - a un sens
n'importe quel caractère entre a et z
[az-] < - n'a pas de sens
a, et de z à l'infini? je maintiens: ca n'a pas de sens
[-az] < - n'a pas de sens
z, et de l'infini à a ? je maintiens: ca n'a pas de sens
Apparemment, le \ est toujours pris comme un caractère quand il est entre [],
u got it! tout simplement parcequ'il est inutile :)
et jamais en dehors, d'où la difficulté
ben ... je trouve au contraire que c'est ultra logique: * jamais quand dans [] * toujours quand hors []
quand on cherche du crochet fermant et du tiret (et autre chose), ça me parait pa immédiat de savoir qu'il faut commencer par crochet fermant puis tiret puis le reste.
j'espere que mon explication t'aidera.