236 votes

Comment créer un dump hexagonal d'un fichier ne contenant que les caractères hexagonaux sans espaces en bash ?

Comment créer un non modifié vidage hexagonal d'un fichier binaire sous Linux en utilisant bash ? Le site od y hexdump insèrent toutes deux des espaces dans le vidage, ce qui n'est pas idéal.

Existe-t-il un moyen d'écrire simplement une longue chaîne de caractères avec tous les caractères hexadécimaux, sans espace ni nouvelle ligne dans la sortie ?

306voto

mark4o Points 20472
xxd -p file

Ou si vous voulez que tout soit sur une seule ligne :

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

19 votes

Fyi Pour inverser le processus : xxd -r -ps fichier hexascii.txt (il est ok avec ou sans nouvelles lignes)

121voto

Michał Trybus Points 5113

Les chaînes de format peuvent faire en sorte que hexdump se comporte exactement comme vous le souhaitez (pas d'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 réelle, comme dans printf. Dans ce cas, il s'agit d'un nombre hexadécimal de 2 caractères, avec des zéros en tête s'ils sont plus courts.

9 votes

Vous avez besoin d'un -v ou il laissera tomber les octets répétés et les remplacera par un astérisque.

2 votes

Je me demande si hexdump lui-même est capable d'ajouter la nouvelle ligne (seulement) à la fin de la sortie (appendice évident de ; echo rend impossible l'utilisation comme alias de bash)

3 votes

Mon pseudo : alias to_hex="hexdump -ve '1/1 \"%.2x\"' && echo"

28voto

Donal Fellows Points 56559

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

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

(C'est l'impression sous forme d'octets hexadécimaux, sans adresse. Et les espaces blancs supprimés ensuite, bien sûr).

3 votes

J'ajouterais également -v dans ce contexte, sinon il saute les répétitions avec * .

12voto

Alan Haggai Alavi Points 34260

Perl one-liner :

perl -e 'local $/; print unpack "H*", <>' file

1 votes

Vérifié. Correspond à "xxd -p file | tr -d '". \n '".

1 votes

Fyi Pour inverser le processus : perl -e 'local $/ ; print pack "H*", <>' <hexascii.txt >file

0 votes

Le "local $/" est inutile.

3voto

Dennis Williamson Points 105818

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X