GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mengubah karakter hex ke ASCII di shell Linux?

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.


Linux
  1. Cara Mengganti Shell di Linux

  2. Bagaimana BASH Shell memuat file konfigurasinya di Linux

  3. Cara Mengubah Shell Default Di Linux

  1. Bagaimana saya bisa menghitung jumlah karakter dalam variabel Bash

  2. Utilitas shell Linux:mengonversi daftar heksadesimal menjadi daftar desimal

  3. linux shell wc -c hitung karakter +1

  1. Dasar-dasar Linux:Cara Mengunduh File di Shell Dengan Wget

  2. Bagaimana Cara Menampilkan Karakter Kontrol (^c, ^d, ^[, ...) Secara Berbeda Di Shell?

  3. Cara menentukan waktu koneksi soket di Linux