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