sed, c'est FAUX !

Vous avez un didactiel ou une astuce particulière concernant un logiciel, partagez votre expérience dans cette partie.
Avatar de l’utilisateur
le Manchot Masqué
Administrateur du site
Messages : 420
Inscription : lun. 26 mai 2008, 21:05
Distribution : Debian, Ubuntu
Niveau : Moitié plein !
Localisation : Guebwiller

sed, c'est FAUX !

Message par le Manchot Masqué » dim. 16 déc. 2018, 12:55

L'utilitaire sed (ou stream editor) en ligne de commande permet de remplacer du texte à la volée via les expressions régulières classiques en programmation. Pour ceux qui ne connaissent pas un

Code : Tout sélectionner

man sed
devrait les éclairer. Quant à ceux qui connaissent déjà l'outil, ils ne devraient pas s'étonner beaucoup de la ligne suivante :

Code : Tout sélectionner

$ echo '|FAUX|FAUX|FAUX|' | sed -e 's/|FAUX|/||/g'
||FAUX||
En clair : on demande à virer tous les FAUX par rien, et ô surprise : un FAUX résiste au nettoyage ! Normal : sed analyse le premier |FAUX|, le remplace, mais continue immédiatement au FAUX suivant sans le | de départ. Le second motif n'est donc pas analysé correctement, et n'est donc pas remplacé.

Pour forcer sed à faire son travail, il faut lui dire de "boucler" en plaçant une étiquette (ici le caractère a) au départ de l'expression, et un ta à la fin qui signifie "to a", et qui provoque le bouclage de l'expression tant que la recherche reste vraie.

Code : Tout sélectionner

 $ echo '|FAUX|VRAI|FAUX|FAUX|FAUX|' | sed -e ':a s/|FAUX|/||/g;ta'
||VRAI||||
Les petites astuces de la ligne de commande n'ont l'air de rien sous GNU/Linux, mais elles permettent un gain de temps impressionnant dans le nettoyage des fichiers, et notamment dans des données CSV issues de bases de données.

Répondre