[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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



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 <stdio.h>
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 <didier.gaumet@gmail.com> 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:
> > 0000000 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/\<x82\>/é/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?)

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

Attachment: signature.asc
Description: OpenPGP digital signature


Reply to: