sed, c'est FAUX !
Publié : 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
devrait les éclairer. Quant à ceux qui connaissent déjà l'outil, ils ne devraient pas s'étonner beaucoup de la ligne suivante :
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.
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.
Code : Tout sélectionner
man sed
Code : Tout sélectionner
$ echo '|FAUX|FAUX|FAUX|' | sed -e 's/|FAUX|/||/g'
||FAUX||
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||||