web-dev-qa-db-fra.com

Comment créer un vidage hexadécimal de fichier contenant uniquement les caractères hexadécimaux sans espaces dans bash?

Comment créer un dump hexagonal non modifié d'un fichier binaire sous Linux à l'aide de bash? Les commandes od et hexdump insèrent des espaces dans la sauvegarde, ce qui n'est pas idéal.

Existe-t-il un moyen d'écrire simplement une longue chaîne avec tous les caractères hexadécimaux, les espaces moins ou les nouvelles lignes de la sortie?

171
David Raswik

xxd -p file

Ou si vous voulez tout sur une seule ligne:

xxd -p file | tr -d '\n'

234
mark4o

Les chaînes de format peuvent faire en sorte que hexdump se comporte exactement comme vous le souhaitez (aucun espace, octet par octet):

hexdump -ve '1/1 "%.2x"'

1/1 signifie "chaque format est appliqué une fois et prend un octet", et "%.2x" est la chaîne de format actuelle, comme dans printf. Dans ce cas: nombre hexadécimal à 2 caractères, zéros à gauche si plus court.

84
Michał Trybus

Cela semble dépendre des détails de la version de od. Sous OSX, utilisez ceci:

od -t x1 -An file |tr -d '\n '

(Il s'agit d'une impression sous forme d'octets hexadécimaux de type, sans adresse. Les espaces sont ensuite supprimés, bien sûr.)

22
Donal Fellows

Perl one-liner:

Perl -e 'local $/; print unpack "H*", <>' file
9
Alan Haggai Alavi

Les autres réponses sont préférables, mais pour une solution purement Bash, j'ai modifié le script en ma réponse ici afin de pouvoir générer un flux continu de caractères hexadécimaux représentant le contenu d'un fichier. (Son mode normal consiste à émuler hexdump -C.)

2
Dennis Williamson