Substitution SED qui fonctionne pas.

Résolu
pcsystemd Messages postés 702 Date d'inscription   Statut Membre Dernière intervention   -  
pcsystemd Messages postés 702 Date d'inscription   Statut Membre Dernière intervention   -
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

A voir également:

4 réponses

zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
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é ;-\

1
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
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


;-))
0
pcsystemd Messages postés 702 Date d'inscription   Statut Membre Dernière intervention   23
 
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



0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Re-

Juste avec la commande
cat -A fichier
.
0
pcsystemd Messages postés 702 Date d'inscription   Statut Membre Dernière intervention   23
 
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?
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
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
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
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


;-))
0
pcsystemd Messages postés 702 Date d'inscription   Statut Membre Dernière intervention   23
 
Un peu en retard mais merci zipe31 pour cette info avec sed.
0