Substitution SED qui fonctionne pas.

Résolu/Fermé
pcsystemd Messages postés 702 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 6 novembre 2024 - Modifié le 1 déc. 2020 à 11:45
pcsystemd Messages postés 702 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 6 novembre 2024 - 19 janv. 2021 à 10:10
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

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
1 déc. 2020 à 15:10
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
2 déc. 2020 à 11:00
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 dimanche 27 novembre 2005 Statut Membre Dernière intervention 6 novembre 2024 23
2 déc. 2020 à 11:24
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
2 déc. 2020 à 12:15
Re-

Juste avec la commande
cat -A fichier
.
0
pcsystemd Messages postés 702 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 6 novembre 2024 23
2 déc. 2020 à 15:26
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
2 déc. 2020 à 15:43
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
3 déc. 2020 à 08:49
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 dimanche 27 novembre 2005 Statut Membre Dernière intervention 6 novembre 2024 23
19 janv. 2021 à 10:10
Un peu en retard mais merci zipe31 pour cette info avec sed.
0