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 -
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 :
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.
De plus je souhaiterais également supprimer du fichier dans la premiere ligne la chaine
Avez vous une idée?
Merci d'avance
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:
- Remplacez le mot sed par le mot mais dans tout le texte. combien de caractères contient le document suite à cette modification (en incluant les espaces) ?
- Remplacez le mot eget par le mot désire dans tout le texte. combien de caractères contient le document suite à cette modification (en incluant les espaces) ? - Guide
- Trousseau mot de passe iphone - Guide
- Comment trouver le mot de passe wifi sur son téléphone - Guide
- Mot de passe - Guide
- Mot de passe administrateur - Guide
4 réponses
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).
Pour les supprimer il te faut trouver leur équivalence en hexadécimal (avec od par exemple), mais c'est pas gagné ;-\
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é ;-\
Merci zipe31.
Tu utilises quel éditeur pour voir les BOM car avec vim sous Linux je ne les vois pas!
J'ai fait un
Tu utilises quel éditeur pour voir les BOM car avec vim sous Linux je ne les vois pas!
J'ai fait un
:set nobombsous 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
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?
Encore une petite question.
Tu peux juste me dire a quoi correspond 'xe2\x80\xaf' ou si tu connais une doc qui explique?
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 :
Si je le passe à "od", j'obtiens le code hexa de chaque caractère :
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
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 ;-))
;-))
À 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\
\257364;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
;-))
Tiens, ceci devrait le faire :
;-))