Re: Re : vim / sed : subsitution de codes hexa

2022-05-27 Par sujet kaliderus
Bonsoir,

Une piste : Je pense que awk devrait répondre à ton besoin, il m'est
arrivé de faire des choses assez " besogneuses " sur de longues
chaînes de caractères dans le passé avec cet outil.
En mixant avec iconv pour l'encodage (à passer dans le script) tu
devrai t'en sortir.
Bon courage

Le sam. 14 mai 2022 à 13:33,  a écrit :
>
> Le 12/05/2022 22:11:50, Alain Vaugham a écrit :
>
> > Il s'agit d'un export provenant d'un logiciel de comptabilité.
> > Je l'ai encodé en utf8 et je veux substituer les caractères hexa:
> > <82> par é
>
> Je me demande si ça ne passerait pas avec konwert, par exemple :
> konwert any-utf8 tonfichier.txt>tonfichier-utf8.txt
>
> nicolas patrois : pts noir asocial
> --
> RÉALISME
>
> M : Qu'est-ce qu'il nous faudrait pour qu'on nous considère comme des humains 
> ? Un cerveau plus gros ?
> P : Non... Une carte bleue suffirait...
>



Re : vim / sed : subsitution de codes hexa

2022-05-14 Par sujet nicolas . patrois
Le 12/05/2022 22:11:50, Alain Vaugham a écrit :

> Il s'agit d'un export provenant d'un logiciel de comptabilité.
> Je l'ai encodé en utf8 et je veux substituer les caractères hexa:
> <82> par é

Je me demande si ça ne passerait pas avec konwert, par exemple :
konwert any-utf8 tonfichier.txt>tonfichier-utf8.txt

nicolas patrois : pts noir asocial
-- 
RÉALISME

M : Qu'est-ce qu'il nous faudrait pour qu'on nous considère comme des humains ? 
Un cerveau plus gros ?
P : Non... Une carte bleue suffirait...



Re: [Résolu] Re: vim / sed : subsitution de codes hexa

2022-05-13 Par sujet Bernard Schoenacker



- Mail original -
> De: "Alain Vaugham" 
> À: debian-user-french@lists.debian.org
> Envoyé: Vendredi 13 Mai 2022 14:00:03
> Objet: [Résolu] Re: vim / sed : subsitution de codes hexa
> 
> Le Thu, 12 May 2022 22:38:16 +,
> Hugues Larrive  a écrit :
> 
> 
> Il est produit lors de l'export émis par un logiciel de comptabilité.
> Pareil pour 0x85, 0x8a, 0x88...
> 
> [...]
> 
> 
> Merci beaucoup pour ce bout de code en c.
> J'ai essayé de l'utiliser mais sans succès. Non pas à cause du code,
> mais parce que je n'ai pas su installer/paramétrer les outils pour la
> compilation.
> Vu le temps que ça prend pour moi de me mettre à un nouveau langage,
> j'ai continué à chercher une alternative en Bash. J'en ai trouvée
> une.
> Je garde précieusement ce code en référence pour le jour où je serai
> obligé de me mettre au c.
> 
> La solution que j'ai trouvée a été d'utiliser vim dans mon script:
> vim -c "%s/\%x82/é/g|wq" mon_fichier
> 
> Encore merci pour la tentative de réponse.
> 

Bonjour Alain,

J'ai pris le temps de faire quelques recherches et j'ai vu 
qu'avec Sed il était possible de le faire...

Documentation de base :
https://superuser.com/questions/517847/use-sed-to-replace-nbsp-160-hex-00a0-octal-240-non-breaking-space
https://www.cyberciti.biz/faq/unix-linux-sed-ascii-control-codes-nonprintable/

application :

sed -i 's/'$(echo "\082")'/é/g'  mon_fichier

Au fait que donne la commande file  ?

Ensuite, en recherchant plus encore, j'ai vu qu'il existait une solution qui 
permet à grep d'effectuer une recherche sur les caractères binaires :

https://github.com/tmbinc/bgrep

Merci pour votre aimable attention

Bien à vous

Bernard



[Résolu] Re: vim / sed : subsitution de codes hexa

2022-05-13 Par sujet Alain Vaugham
Le Thu, 12 May 2022 22:38:16 +,
Hugues Larrive  a écrit :

> Je me suis créé un petit fichier test avec 0x82 à la place d'un é
> pour tester. (Je me demande d'où sort ce 0x82...)

Il est produit lors de l'export émis par un logiciel de comptabilité.
Pareil pour 0x85, 0x8a, 0x88...

[...]

> L'utiliser à la place de sed :
> cat ma_source | ./0x82to0xc3a9 > ma_cible
> 
> Voilà qui devrait faire le travail aussi bien qu'un éditeur hexa.

Merci beaucoup pour ce bout de code en c.
J'ai essayé de l'utiliser mais sans succès. Non pas à cause du code,
mais parce que je n'ai pas su installer/paramétrer les outils pour la
compilation.
Vu le temps que ça prend pour moi de me mettre à un nouveau langage,
j'ai continué à chercher une alternative en Bash. J'en ai trouvée une.
Je garde précieusement ce code en référence pour le jour où je serai
obligé de me mettre au c.

La solution que j'ai trouvée a été d'utiliser vim dans mon script:
vim -c "%s/\%x82/é/g|wq" mon_fichier

Encore merci pour la tentative de réponse.


-- 
Alain Vaugham
Clef GPG : 0xDB77E054673ECFD2


pgpWAk1mTB97N.pgp
Description: Signature digitale OpenPGP


Re: vim / sed : subsitution de codes hexa

2022-05-12 Par sujet Alain Vaugham
Le Thu, 12 May 2022 23:14:50 +0200,
didier gaumet  a écrit :

> je me demande dans quel mesure tu n'as pas une différence
> d'environnement linguistique interactif/batch (par exemple examiner
> $LANG dans ton script pour vérifier?)

Dans le scripts
echo $LANG
donne:
fr_FR.UTF-8


-- 
Alain Vaugham
Clef GPG : 0xDB77E054673ECFD2



Re : Re: vim / sed : subsitution de codes hexa

2022-05-12 Par sujet Hugues Larrive
Bonjour,

Je me suis créé un petit fichier test avec 0x82 à la place d'un é
pour tester. (Je me demande d'où sort ce 0x82...)

Chez moi (debian 11 / sed 4.7) ta commande sed donne le même résultat que vi ce 
qui confirmerait ce qu'a dit Didier.

Une solution sûre pour effectuer cette conversion est de la faire entièrement 
en hexa avec un petit programme en C, en UTF-8 le caractère 'é' est codé 0xc3a9 
ce qui donne le programme 0x82to0xc3a9.c suivant :
#include 
int main()
{
int c;
while ((c = getchar()) != EOF) {
if (c == 0x82) printf("%c%c", 0xc3, 0xa9);
else printf("%c", c);
}
}

Le compiler :
cc 0x82to0xc3a9.c -o 0x82to0xc3a9

L'utiliser à la place de sed :
cat ma_source | ./0x82to0xc3a9 > ma_cible

Voilà qui devrait faire le travail aussi bien qu'un éditeur hexa.

Cordialement,
Hugues

--- Original Message ---
Le jeudi 12 mai 2022 à 23:14, didier gaumet  a écrit :
ère

> 

> 

> 

> 

> Le jeudi 12 mai 2022 à 22:11 +0200, Alain Vaugham a écrit :
> 

> > Bonjour la liste,
> > 

> > Il s'agit d'un export provenant d'un logiciel de comptabilité.
> > Je l'ai encodé en utf8 et je veux substituer les caractères hexa:
> > <82> par é
> > 

> > Sous vim les substitutions se font correctement
> > :%s/\%x82/é/g
> > 

> > Vu la quantité de substitutions à faire je souhaite scripter
> > l'opération avec sed:
> > cat ma_source | sed 's/\x82/é/g' > ma_cible
> > Malheureusement ça se passe mal car le résultat obtenu est
> > �é
> > soit:
> > 000 C2 C3 A9
> > 

> > D'après ce que je comprends de la faq
> > http://sed.sourceforge.net/grabbag/tutorials/sedfaq.txt
> > dans sed v1.5 il y aurait une autre syntaxe pour borner la chaîne à
> > substituer
> > \<...\>
> > cat ma_source | sed 's/\/é/g' > ma_cible
> > Là aussi ça ne se passe pas comme souhaité.
> > Le sed de Buster que j'utilise est en v4.7
> > 

> > Y aurait-il une autre syntaxe ou est-ce qu'une solution de
> > contournement existerai sous bash?
> > 

> > Merci par avance
> 

> 

> Bonsoir,
> 

> Je connais très peu les scripts bash et encore moins sed donc je dis
> peut-être n'importe quoi, mais vu qu'il s'agit d'un caractère accentué,
> je me demande dans quel mesure tu n'as pas une différence
> d'environnement linguistique interactif/batch (par exemple examiner
> $LANG dans ton script pour vérifier?)

publickey - hlarrive@pm.me - 0xE9429B87.asc
Description: application/pgp-keys


signature.asc
Description: OpenPGP digital signature


Re: vim / sed : subsitution de codes hexa

2022-05-12 Par sujet didier gaumet



Le jeudi 12 mai 2022 à 22:11 +0200, Alain Vaugham a écrit :
> Bonjour la liste,
> 
> Il s'agit d'un export provenant d'un logiciel de comptabilité.
> Je l'ai encodé en utf8 et je veux substituer les caractères hexa:
> <82> par é
> 
> Sous vim les substitutions se font correctement
> :%s/\%x82/é/g
> 
> Vu la quantité de substitutions à faire je souhaite scripter
> l'opération avec sed:
> cat ma_source | sed 's/\x82/é/g' > ma_cible
> Malheureusement ça se passe mal car le résultat obtenu est
> �é
> soit:
> 000   C2 C3 A9
> 
> D'après ce que je comprends de la faq
> http://sed.sourceforge.net/grabbag/tutorials/sedfaq.txt
> dans sed v1.5 il y aurait une autre syntaxe pour borner la chaîne à
> substituer
> \<...\>
> cat ma_source | sed 's/\/é/g' > ma_cible
> Là aussi ça ne se passe pas comme souhaité.
> Le sed de Buster que j'utilise est en v4.7
> 
> 
> Y aurait-il une autre syntaxe ou est-ce qu'une solution de
> contournement existerai sous bash?
> 
> Merci par avance

Bonsoir,

Je connais très peu les scripts bash et encore moins sed donc je dis
peut-être n'importe quoi, mais vu qu'il s'agit d'un caractère accentué,
je me demande dans quel mesure tu n'as pas une différence
d'environnement linguistique interactif/batch (par exemple examiner
$LANG dans ton script pour vérifier?)