Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

sed et caractères hexadécimaux

8 réponses
Avatar
Prakash Countcham
Bonjour,

Je cherche à écrire une petite commande sed et ne pense pas être loin du
résultat. Mais il me manque un petit truc.

Lorsque j'écris la commande suivante, j'arrive à remplacer tous les ^^e9 par
le caractère de code hexadécimal e9 :

sed "s/\^\^\(e9\)/\xe9/"

Mais lorsque j'essaye de généraliser la commande :

sed "s/\^\^\(..\)/\x\1/"

^^e9 est remplacé par xe9


Comment faire pour demander à sed d'utiliser \1 comme argument de \x ?

Merci d'avance,

--
Prakash

8 réponses

Avatar
Stephane Chazelas
2004-11-12, 16:01(+01), Prakash Countcham:
[...]
sed "s/^^(e9)/xe9/"

Mais lorsque j'essaye de généraliser la commande :

sed "s/^^(..)/x1/"

^^e9 est remplacé par xe9


Comment faire pour demander à sed d'utiliser 1 comme argument de x ?
[...]


Deja, il n'y a que GNU sed (ou ssed) qui reconnaisse xHH.

Tu peux utiliser perl a la place:

perl -pe 's/^^(..)/pack("H2",$1)/ge'

--
Stephane

Avatar
Laurent Wacrenier
Prakash Countcham écrit:
Comment faire pour demander à sed d'utiliser 1 comme argument de x ?


Il n'y a pas d'évaluateur dans sed.
demande à perl :
perl -pe 's/^^(..)/sprintf "%c", hex $1/ge'

Avatar
Prakash Countcham
Stephane Chazelas writes:
Deja, il n'y a que GNU sed (ou ssed) qui reconnaisse xHH.

Tu peux utiliser perl a la place:

perl -pe 's/^^(..)/pack("H2",$1)/ge'


Merci pour la ligne de commande.

J'aurais préféré utiliser GNU sed à cause de l'option -i (remplacement dans
le fichier), mais je pense pouvoir m'en sortir.

Merci encore pour la rapidité de la réponse !

--
Prakash

Avatar
Laurent Wacrenier
Prakash Countcham écrit:
J'aurais préféré utiliser GNU sed à cause de l'option -i (remplacement dans
le fichier), mais je pense pouvoir m'en sortir.


Utilise l'option -i de perl.

Avatar
Pascal Bourguignon
Prakash Countcham writes:

Stephane Chazelas writes:
Deja, il n'y a que GNU sed (ou ssed) qui reconnaisse xHH.

Tu peux utiliser perl a la place:

perl -pe 's/^^(..)/pack("H2",$1)/ge'


Merci pour la ligne de commande.

J'aurais préféré utiliser GNU sed à cause de l'option -i (remplacement dans
le fichier), mais je pense pouvoir m'en sortir.


Alors c'est tout à fait possible, car sed est équivalent à une machine
de Turing. Mais il te faut alors décrire tout les états. Comme il y a
256 caractères différents, il faudra au moins 256 règles:

awk 'BEGIN{
for(i=0;i<256;i++){
if(i=G){cX;}else{cG;}
if((i=9)||(i=7)||(i=’)){s="";}else{s=""}
if(i!”){printf "s%c^^%02x%c%s%c%cgn",c,i,c,s,i,c;}}
i”;printf "s%c^^%02x%c%s%c%cgn",c,i,c,s,i,c;exit(0);}' > rules.sed

sed -i -f rules.sed file.txt


Merci encore pour la rapidité de la réponse !


--
__Pascal Bourguignon__


Avatar
Prakash Countcham
Laurent Wacrenier <lwa@ teaser . fr> writes:

Prakash Countcham écrit:
J'aurais préféré utiliser GNU sed à cause de l'option -i (remplacement dans
le fichier), mais je pense pouvoir m'en sortir.


Utilise l'option -i de perl.


Merci beaucoup. C'est exactement ce que je voulais.

J'avais essayé à tout hasard
perl -ipe '...'
perl -ip -e '...'

mais pas

perl -pi -e '...'

Amicalement,

--
Prakash qui cherchait de la documentation avec man perl au lieu de man perlrun


Avatar
Stephane Chazelas
2004-11-12, 18:10(+01), Pascal Bourguignon:
[...]
Alors c'est tout à fait possible, car sed est équivalent à une machine
de Turing. Mais il te faut alors décrire tout les états. Comme il y a
256 caractères différents, il faudra au moins 256 règles:
[...]


Pas forcement,

tu peux ecrire:

s/$/
^A:01^B:02...é:e9.../
:1
s/^^(..)(.*n.*(.):1)/32/
t1

--
Stephane

Avatar
Pascal Bourguignon
Stephane Chazelas writes:

2004-11-12, 18:10(+01), Pascal Bourguignon:
[...]
Alors c'est tout à fait possible, car sed est équivalent à une machine
de Turing. Mais il te faut alors décrire tout les états. Comme il y a
256 caractères différents, il faudra au moins 256 règles:
[...]


Pas forcement,

tu peux ecrire:

s/$/
^A:01^B:02...é:e9.../
:1
s/^^(..)(.*n.*(.):1)/32/
t1


C'est malin! Comme quoi, sed c'est encore plus puissant qu'on ne le croit.

--
__Pascal Bourguignon__ http://www.informatimago.com/
The world will now reboot; don't bother saving your artefacts.