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


188

Comment créer un vidage hexadécimal non modifié d'un fichier binaire sous Linux à l'aide de bash? Les odet hexdumpcommandes les deux espaces d'insertion dans la décharge et ce n'est pas idéal.

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


Réponses:


250

xxd -p file

Ou si vous voulez tout sur une seule ligne:

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


13
fyi Pour inverser le processus: xxd -r -ps fichier hexascii.txt (c'est ok avec ou sans saut de ligne)
Curtis Yallop

92

Les chaînes de format peuvent faire en sorte que hexdump se comporte exactement comme vous le souhaitez (pas d'espaces du tout, octet par octet):

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

1/1signifie "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: nombre hexadécimal à 2 caractères, zéros non significatifs s'ils sont plus courts.


7
Vous avez besoin d'un -vou il supprimera les octets répétés et les remplacera par un astérisque.
Suspendu jusqu'à nouvel ordre.

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

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

Le nombre d'itérations et le nombre d'octets par défaut à un, donc 1/1 peut être omis, laissant lehexdump -ve '"%.2x"'
Alex Che

@mykhal, c'est possible, si vous connaissez le nombre d'octets en sortie. Dites si vous utilisez hexdump pour ne sortir que 13 premiers octets:hexdump -n 13 -e '13/1 "%.2x" "\n"'
Alex Che


10

Perl one-liner:

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

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

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

Le "$ / local" est inutile.
Curtis Yallop

Mise à jour jusqu'au dernier commentaire: Le "local $ /" n'est pas nécessaire pour "pack". Pour unpack, vous en avez besoin mais vous pouvez également mettre "undef $ /". $ / est le séparateur de ligne (NL par défaut). undefined le met en mode slurp. Ainsi <> référencé dans un contexte de chaîne extrait le fichier binaire entier sans l'analyser en lignes.
Curtis Yallop

Autre forme: perl -e 'print décompresser "H *", join ("", <>)' <fichier
Curtis Yallop

2

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.