Marc Chantreux a écrit :
3) Plus généralement, si une bonne âme veut bien ajouter à la page http://cli.asyd.net/home/filtres/sed la liste de ce qui doit être échappé ou pas suivant les cas...
et par là réécrire man regex ? je ne crois pas que ce soit utile.
Sauf qu'il y a plusieurs spécificités liées à sed (le '+' et les '()' par exemple, je ne sais pas s'il y en a d'autres). Par ailleur man regex ne parle pas des caractères à échapper ou pas, ni de la syntaxe.
idem que pour le crochet: c'est la position (1er ou dernier) qui rend au symbole son simple rang. De manière générale, je crois qu'il ne faut pas tenter de retenir les règles mais tenter de les déduire:
Je suis d'accord, sauf que j'ai du mal à comprendre la logique...
[a-z] < - a un sens [az-] < - n'a pas de sens [-az] < - n'a pas de sens
Ben si, "tiret, a ou z" (mon sed interprête les 2 comme ça) echo '[aze]a-AbAc' | sed -e 's#[-az]#_#g' [__e]__AbAc Mon pb est de comprendre quand le \ signifie "échapper le caractère qui suit" et quand il signifie "caractère backslash". Il me semble que là dessus, sed fonctionne différemment des autres outils qui utilisent les regexp (le pb vient sûrement de la différence regex posix et regex PCRE que j'ai davantage l'habitude de manipuler). echo '[aze]\-]a-Ab\Ac' | sed -e 's#[\]-]#_#g' [aze]_a-Ab\Ac echo '[aze]\-]a-Ab\Ac' | sed -e 's#[]\-]#_#g' [aze____a_Ab_Ac echo '[aze]\-]a-Ab\Ac' | sed -e 's#\-]#_#g' [aze]\_a-Ab\Ac echo '[aze]\-]a-Ab\Ac' | sed -e 's#\\-]#_#g' [aze]_a-Ab\Ac Apparemment, le \ est toujours pris comme un caractère quand il est entre [], et jamais en dehors, d'où la difficulté 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. Daniel PS:
Il y a une chaine vide entre chaque caracteres.
Ben oui, truc évident que j'ai zappé dans mes tests, du a* n'a pas de sens tout seul, mais à vouloir tester chaque petit bout isolément j'ai finit par écrire n'importe quoi.