echo -n 5a | perl -pe 's/([0-9a-f]{2})/chr hex $1/gie'
Perhatikan bahwa ini tidak akan melewatkan karakter non-hex. Jika Anda hanya menginginkan hex (tanpa spasi dari string asli, dll):
echo 5a | perl -ne 's/([0-9a-f]{2})/print chr hex $1/gie'
Juga, zsh
dan bash
dukung ini secara native di echo
:
echo -e '\x5a'
Anda dapat melakukannya dengan echo
saja, tanpa hal-hal lain. Jangan lupa untuk menambahkan "-n" atau Anda akan mendapatkan linebreak secara otomatis:
echo -n -e "\x5a"
Saya biasa melakukan ini dengan xxd:
echo -n 5a | xxd -r -p
Tapi kemudian saya menyadari bahwa di Debian/Ubuntu, xxd adalah bagian dari vim-common dan karenanya mungkin tidak ada di sistem minimal. Untuk juga menghindari Perl (IMHO juga bukan bagian dari sistem minimal), saya akhirnya menggunakan sed, xargs, dan printf seperti ini:
echo -n 5a | sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' | xargs printf
Sebagian besar, saya hanya ingin mengonversi beberapa byte dan tidak apa-apa untuk tugas seperti itu. Keuntungan dari solusi ini dibandingkan dengan ghostdog74 adalah, bahwa ini dapat mengubah string hex dengan panjang sembarang secara otomatis. xargs digunakan karena printf tidak membaca dari input standar.