#1 Le 26/06/2014, à 10:31
- McRbt
[Résolu] Supprimer caractères à la fin d'une ligne spécifique
Bonjour,
J'écris un script pour traiter des fichiers .csv. Toutes les données qui y sont inscrites sont séparés d'un " ; ".
Exemple :
DonnéeA;DonnéeB;DonnéeC;DonnéeD;DonnéeE
Cependant, ma première et dernière ligne se présente ainsi :
DonnéeA;DonnéeB;;;
Comme vous pouvez le voir, il y a des " ; " en trop à la fin de ces lignes. Ceux sont ces caractères que je voudrais supprimer.
J'ai pensé à ça :
sed -i '1s/[;;]//g;$s/[;;]//g' fichier.csv
Mais j'ai remarqué qu'il me supprime seulement ce qu'il y a entre crochets, donc si il y a qu'un seul " ; ", il ne sera pas supprimé.
Comment indiquer à sed de supprimer le reste des " ; " si il y en a plus d'un, et seulement en fin de première et dernière ligne ?
Dernière modification par McRbt (Le 26/06/2014, à 11:19)
Hors ligne
#2 Le 26/06/2014, à 11:08
- pingouinux
Re : [Résolu] Supprimer caractères à la fin d'une ligne spécifique
Hello,
sed -i '1s/[;;]//g;$s/[;;]//g' fichier.csv
Mais j'ai remarqué qu'il me supprime seulement ce qu'il y a entre crochets, donc si il y a qu'un seul " ; ", il ne sera pas supprimé.
Cette commande supprime tous les ";" des première et dernière lignes ([;;] est équivalent à [;] et à ;).
Plutôt ceci
sed -i '1s/;\+$//;$s/;\+$//g' fichier.csv
ou
sed -i '1ba;$ba;b;:a;s/;\+$//' fichier.csv
ou
sed -i '1!{$!b};s/;\+$//' fichier.csv
Hors ligne
#3 Le 26/06/2014, à 11:18
- McRbt
Re : [Résolu] Supprimer caractères à la fin d'une ligne spécifique
pingouinux,
Ca marche du tonerre de Zeus, je passe en résolu, merci beaucoup. C'est incroyable la puissance de sed.
Si tu as de la documentation sur cette commande, je suis preneur.
Hors ligne
#4 Le 26/06/2014, à 11:39
- tiramiseb
Re : [Résolu] Supprimer caractères à la fin d'une ligne spécifique
Salut,
Si tu veux que la suppression des ";" se fasse aussi sur les éventuelles lignes au milieu et pas seulement la première et la dernière, alors la syntaxe est plus simple :
sed -i 's/;\+$//' fichier.csv
Par contre, j'aimerais réagir sur ta phrase suivante :
Comme vous pouvez le voir, il y a des " ; " en trop à la fin de ces lignes.
Non, car c'est du CSV.
Le CSV encode un tableau en champs séparés par des points-virgules.
Si un champ est vide, il présente un champ vide entre deux points-virgules.
Donc ce ne sont pas des points-virgules en trop. Ils sont conformes au format CSV.
Peut-être pas conformes à tes besoins, qui sont, eux, non-conformes au format CSV
Si tu as de la documentation sur cette commande, je suis preneur.
http://boutique.ed-diamond.com/gnulinux … hs-72.html
Oui ça coûte de l'argent, mais franchement par rapport au travail fourni pour présenter tout ça dans un joli magazine/bouquin, ça vaut le coup.
(et puis c'est de la bonne qualité, je te l'assure... C'est moi qui l'ai écrit )
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#5 Le 26/06/2014, à 12:10
- pingouinux
Re : [Résolu] Supprimer caractères à la fin d'une ligne spécifique
Voici quelques tutoriels (obtenus en cherchant sed tutoriel) :
Comment ça marche
OpenClassRooms
sourceforge
Hors ligne