echo -n 5a | perl -pe 's/([0-9a-f]{2})/chr hex $1/gie'
Notez que cela n'ignorera pas les caractères non hexadécimaux. Si vous ne voulez que l'hexagone (pas d'espace dans la chaîne d'origine, etc.) :
echo 5a | perl -ne 's/([0-9a-f]{2})/print chr hex $1/gie'
Aussi, zsh
et bash
prend en charge cela nativement dans echo
:
echo -e '\x5a'
Vous pouvez le faire avec echo
seulement, sans les autres trucs. N'oubliez pas d'ajouter "-n" ou vous obtiendrez automatiquement un saut de ligne :
echo -n -e "\x5a"
J'avais l'habitude de le faire avec xxd :
echo -n 5a | xxd -r -p
Mais ensuite, j'ai réalisé que dans Debian/Ubuntu, xxd faisait partie de vim-common et pouvait donc ne pas être présent dans un système minimal. Pour éviter également Perl (à mon humble avis, il ne fait pas non plus partie d'un système minimal), j'ai fini par utiliser sed, xargs et printf comme ceci :
echo -n 5a | sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' | xargs printf
La plupart du temps, je ne veux convertir que quelques octets et c'est correct pour de telles tâches. L'avantage de cette solution par rapport à celle de ghostdog74 est qu'elle peut convertir automatiquement des chaînes hexadécimales de longueurs arbitraires. xargs est utilisé car printf ne lit pas à partir de l'entrée standard.