expressions sed

Daniel Caillibaud ml at editionsdidier.com
Tue Jan 22 11:01:50 CET 2008


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.


More information about the Shell mailing list