[Linux-31] Une question à propos de rename (ou de perl)

claude Micouin mlnglst at free.fr
Lun 28 Mar 22:58:09 CEST 2016


Le jeudi 24 mars 2016 à 17:28 +0100, jpcas a écrit :
> Le 23/03/2016 22:51, claude Micouin a écrit :
>  
> > Juste pour comprendre, c'est quoi la syntaxe de tout ça?
> > 's/^.*_([^_]*_)/$1/'

Merci pour la réponse et pardon pour le retard.

> Alors, rien de bien sorcier. C'est quasiment la même syntaxe que pour
> sed (dont je suis plus habitué qu'avec perl).
> 
> Donc même syntaxe que pour sed :
OK. C'est bon à savoir pour une autre fois.

> 
> s/motif/remplacement/
> Ça je suppose que tu connais. On remplace tout ce qui concerne la partie
> gauche (motif) par la partie droite (remplacement.
Oui.

> ^.*_
> Là on joue sur la gourmandise des regex et on prend tout (.*) ce qui
> commence en début de ligne (^) jusqu'au dernier caractère underscore
> (_).
Ok. C'est comme pour grep (^ pour le début de ligne et $ pour la fin de
ligne) mais j'ai fait le test sans le ^ et le résultat est le même.

Pour le .*, je ne suis pas sûr, mais est-ce que ça veut dire un nombre
indéterminé de * ? (* ne serait lui qu'un seul joker).


>  Mais c'est là que le bât blesse. Si on n'avait mis que ça dans la
> regex du motif, la gourmandise des regex aurait tout pris jusqu'au
> dernier underscore sur la ligne. D'où l'expression suivante.
> 
> 
> ([^_]*_)
> Les parenthèses signifient qu'on délimite un sous-ensemble, qui servira
> de référence arrière par la suite.
> Donc, on recherche tout caractère à l'exception d'un underscore. Le [^_]
> désigne la négation. Dans ton cas, le motif du sous-ensemble ressemblera
> à "Problemes_". Ce qui empêche l'expression précédente d'englober tout
> jusqu'au dernier underscore.
Ça, c'est OK.

> 
> $1
> Ça c'est la référence-arrière, qui fait référence au sous-ensemble
> précédent (la partie entre parenthèses). On la remet en place sans le
> début de la ligne.
OK.


> S'il y avait eu plusieurs sous-ensembles dans
> l'expression, ils auraient été nommés dans l'ordre d'apparition $2, $3,
> $4, etc.
OK.

> 
> 
> Je ne sais pas si c'est bien clair, mais des fois ce n'est pas évident
> d'expliquer certaines choses ;-\
Non, c'est clair
Encore merci.
-- 
claude Micouin <mlnglst at free.fr>




Plus d'informations sur la liste de diffusion Linux-31