Substitution SED qui fonctionne pas. [Résolu]

Signaler
Messages postés
582
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
19 janvier 2021
-
Messages postés
582
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
19 janvier 2021
-
Bonjour,

J'ai le fichier toto.csv qui contient une multitude de lignes comme ci-dessous :

Comp;Num;De;Cli;Impress;CTRY;CPCTL moy.;CPMPN moyen;Cot
102_3211 | O , A bert , Alert | SY;673-081-7803;EUR;280;1 522;18,40 %;0,65;119,84;182,4
102_3303 | O , Famiy , Poltult | SY;869-869-0972;EUR;166;2  364;12,17 %;1,1;133,72;182,4
102_2923 | 102_716 | O , Répue , Pa 11 | SP;806-507-5734;EUR;235;3 076;7,64 %;1,56;119,08;366,28


Je souhaite supprimer les espaces dans les nombre en gras et cela de 1 a 9.

Exemples:
1 000 deviendrait 1000
2 000 deviendrait 2000
etc..

J'ai essayé cette commande SED mais cela ne fonctionne pas.

sed -r 's/([0-9]) +([0-9])/\1\2/g'


De plus je souhaiterais également supprimer du fichier dans la premiere ligne la chaine
"De;" 
et dans toutes les lignes les chaines
"EUR;" et " %"


Avez vous une idée?

Merci d'avance

4 réponses

Messages postés
36268
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
19 janvier 2021
5 850
Salut,

Le problème c'est que ce ne sont pas de simples espaces que tu as mais des BOM (Indicateur d'ordre des octets).


Comp;Num;De;Cli;Impress;CTRY;CPCTL moy.;CPMPN moyen;Cot$
102_3211 | O , A bert , Alert | SY;673-081-7803;EUR;280;1M-bM-^@M-/522;18,40 %;0,65;119,84;182,4$
102_3303 | O , Famiy , Poltult | SY;869-869-0972;EUR;166;2 M-bM-^@M-/364;12,17 %;1,1;133,72;182,4$
102_2923 | 102_716 | O , RM-CM-)pue , Pa 11 | SP;806-507-5734;EUR;235;3M-bM-^@M-/076;7,64 %;1,56;119,08;366,28$


Pour les supprimer il te faut trouver leur équivalence en hexadécimal (avec od par exemple), mais c'est pas gagné ;-\

Messages postés
36268
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
19 janvier 2021
5 850
Re-

Tiens, ceci devrait le faire :

$ sed 's# *\xe2\x80\xaf##' f1 
Comp;Num;De;Cli;Impress;CTRY;CPCTL moy.;CPMPN moyen;Cot
102_3211 | O , A bert , Alert | SY;673-081-7803;EUR;280;1522;18,40 %;0,65;119,84;182,4
102_3303 | O , Famiy , Poltult | SY;869-869-0972;EUR;166;2364;12,17 %;1,1;133,72;182,4
102_2923 | 102_716 | O , Répue , Pa 11 | SP;806-507-5734;EUR;235;3076;7,64 %;1,56;119,08;366,28


;-))
Messages postés
582
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
19 janvier 2021
16
Merci zipe31.

Tu utilises quel éditeur pour voir les BOM car avec vim sous Linux je ne les vois pas!

J'ai fait un
:set nobomb 
sous Vim pour voir si cela supprimer les BOM mais comme je n'arrive pas a afficher les BOM dans VIM!

Comp;Num;De;Cli;Impress;CTRY;CPCTL moy.;CPMPN moyen;Cot
102_3211 | O , A bert , Alert | SY;673-081-7803;EUR;280;1 522;18,40 %;0,65;119,84;182,4
102_3303 | O , Famiy , Poltult | SY;869-869-0972;EUR;166;2  364;12,17 %;1,1;133,72;182,4
102_2923 | 102_716 | O , Répue , Pa 11 | SP;806-507-5734;EUR;235;3 076;7,64 %;1,56;119,08;366,28



Messages postés
36268
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
19 janvier 2021
5 850
Re-

Juste avec la commande
cat -A fichier
.
Messages postés
582
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
19 janvier 2021
16
Merci beaucoup.

Encore une petite question.

Tu peux juste me dire a quoi correspond 'xe2\x80\xaf' ou si tu connais une doc qui explique?
Messages postés
36268
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
19 janvier 2021
5 850
C'est la représentation hexadécimale du code BOM.

Si je prends ton fichier de départ en ne gardant que les 3 chiffres encadrés par des points virgules j'ai ça :
$ cat f3
;1 522;
;2  364;
;3 076;


Si je le passe à "od", j'obtiens le code hexa de chaque caractère :
$ od -tx1 f3
0000000 3b 31 e2 80 af 35 32 32 3b 0a 3b 32 20 e2 80 af
0000020 33 36 34 3b 0a 3b 33 e2 80 af 30 37 36 3b 0a
0000037
Messages postés
36268
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
19 janvier 2021
5 850
Je viens d'y repenser, mais sed est capable d'afficher les caractères non-imprimables en octal.
À partir de là c'est encore plus simple ;-))

$ sed -n l f1 
Comp;Num;De;Cli;Impress;CTRY;CPCTL moy.;CPMPN moyen;Cot$
102_3211 | O , A bert , Alert | SY;673-081-7803;EUR;280;1\342\200\257\
522;18,40 %;0,65;119,84;182,4$
102_3303 | O , Famiy , Poltult | SY;869-869-0972;EUR;166;2 \342\200\
\257
364;12,17 %;1,1;133,72;182,4$
102_2923 | 102_716 | O , R\303\251pue , Pa 11 | SP;806-507-5734;EUR;2\
35;3\342\200\257076;7,64 %;1,56;119,08;366,28$


$ sed 's/ *\o342\o200\o257//' f1 
Comp;Num;De;Cli;Impress;CTRY;CPCTL moy.;CPMPN moyen;Cot
102_3211 | O , A bert , Alert | SY;673-081-7803;EUR;280;1522;18,40 %;0,65;119,84;182,4
102_3303 | O , Famiy , Poltult | SY;869-869-0972;EUR;166;2364;12,17 %;1,1;133,72;182,4
102_2923 | 102_716 | O , Répue , Pa 11 | SP;806-507-5734;EUR;235;3076;7,64 %;1,56;119,08;366,28


;-))
Messages postés
582
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
19 janvier 2021
16
Un peu en retard mais merci zipe31 pour cette info avec sed.