expressions sed

Daniel Caillibaud ml at editionsdidier.com
Mon Jan 28 11:42:14 CET 2008


Marc Chantreux a écrit :
>> 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 *

et aussi de '.' et '['.
Pourquoi ces 3 là et pas d'autres ? C'était un peu le sens de ma question initiale.

> ). Ainsi \( ouvre une capture et ( est le
> symbole (.

[...]

> ben ... je trouve au contraire que c'est ultra logique:

Mouais, c'est là que je suis moyennement convaincu. J'ai assimilé la règle, mais avec pas mal de coups sur la tête comme 
vous avez pu le constater. Je ne me rappelle pas avoir tatonné à ce point avec les PCRE qui me semblent plus claire avec 
"certains caractères ont une signification particulière et doivent être échappés pour redevenir de simples caratères" et 
l'a priori "le \ échappe toujours le caractère qui suit, même si c'était inutile de le faire" qui conduit c'est vrai à 
adopter le profil "dans le doute, échappe" ;-).
Bref, sed me paraitrait plus logique s'il fallait échapper aussi . * et [] pour leur donner leur signification 
particulière spécifiques aux regexp (mais la lecture et l'écriture deviendrait atroce, je le reconnais...).

J'ai essayé de résumer tout ça sur http://cli.asyd.net/home/filtres/sed#echappement_des_caracteres, merci de jeter un 
oeil (c'est court) et d'ajouter ce qui manque (pas d'autres exceptions notamment).

-- 
Daniel


More information about the Shell mailing list