expressions sed

theo theocrite at free.fr
Tue Jan 22 19:10:04 CET 2008


Daniel Caillibaud wrote:
> 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.

Re,


Vraiment dans tes quatre exemples je ne vois pas ce qu'il y a de compliqué.

Dans le premier cas, le premier caractère après le [ est le \, suivit du
], ça correspond bien à "caractère backslash'.

Dans le deuxième cas, le premier caractère après le [ est ]. Le ] est
donc un caractère pris en compte au même titre que \ et -. C'est donc ]
ou - ou \.

Dans le cas d'après pas de [, chaque caractère est interprété. En dehors
de [], \ est effectivement un caractère d'échappement. Donc \-] signifie
- puis ].

Enfin pour le dernier exemple, tu as un backslash et un tiret. Rien de
plus simple.


Vraiment, je ne suis pas un grand gourou de sed et pour tout dire, je ne
l'ai pratiquement jamais utilisé, mais je ne vois vraiment pas comment,
dans les exemples que tu as donné, on pourrait arriver à un autre
résultat, et donc en quoi ces résultats sont surprenants ou, selon toi,
imprévisibles.

--
À++
theo.


More information about the Shell mailing list