GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo convertir caracteres hexadecimales a ASCII en el shell de Linux?

echo -n 5a | perl -pe 's/([0-9a-f]{2})/chr hex $1/gie'

Tenga en cuenta que esto no omitirá los caracteres no hexadecimales. Si desea solo el hexadecimal (sin espacios en blanco de la cadena original, etc.):

echo 5a | perl -ne 's/([0-9a-f]{2})/print chr hex $1/gie'

Además, zsh y bash admite esto de forma nativa en echo :

echo -e '\x5a'

Puedes hacer esto con echo solamente, sin las otras cosas. No olvide agregar "-n" o obtendrá un salto de línea automáticamente:

echo -n -e "\x5a"

Solía ​​hacer esto con xxd:

echo -n 5a | xxd -r -p

Pero luego me di cuenta de que en Debian/Ubuntu, xxd es parte de vim-common y, por lo tanto, podría no estar presente en un sistema mínimo. Para evitar también Perl (en mi humilde opinión, tampoco es parte de un sistema mínimo), terminé usando sed, xargs e printf así:

echo -n 5a | sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' | xargs printf

Principalmente, solo quiero convertir unos pocos bytes y está bien para tales tareas. La ventaja de esta solución sobre la de ghostdog74 es que puede convertir cadenas hexadecimales de longitudes arbitrarias automáticamente. xargs se usa porque printf no lee desde la entrada estándar.


Linux
  1. Conceptos básicos de Linux:cómo descargar archivos en el Shell con Wget

  2. ¿Cómo mostrar los caracteres de control (^c, ^d, ^[, …) de manera diferente en el Shell?

  3. ¿Cómo convertir la salida de shell de Linux a HTML?

  4. ¿Cómo puedo contar la cantidad de caracteres en una variable Bash?

  5. Cómo determinar el tiempo de actividad de la conexión del socket en Linux

Cómo instalar Fish, The Friendly Interactive Shell, en Linux

Cómo limitar el acceso del usuario al sistema Linux

Cómo convertir imágenes a formato ASCII en Linux

Cómo cambiar el shell de usuario predeterminado en el sistema operativo Linux

Cómo cambiar el color de salida de 'Echo' en Linux

Cómo cambiar el shell predeterminado en el sistema Linux