Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile

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 wink )

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