cClaude.rocks ☕ Le blog

[Nouvelles technologies du libre, sciences et coups de gueule…]

Menu

Dans certain cas de figure, il peut être utile de regarder un fichier binaire sous sa forme ASCII (comme un fichier texte), l’utilisation d’une commande comme cat ne sera pas très pertinente, car il est probable que la commande rencontrera de nombreux caractères qui seront interprétés comme des caractères de contrôle, ce qui, par exemple, effacera l’écran, voir bloquera le terminal.

La solution consiste donc à utiliser un outil qui ne traitera pas les caractères de contrôles.



La commande hexdump

L’utilitaire hexdump est une commande qui affiche les fichiers spécifiés, ou l’entrée standard, si aucun fichier n’est spécifié, dans un format spécifié par l’utilisateur (en caractères affichables).

Supposons le fichier donné par :

cat <<EOF | tee filetest.txt
Lorem ipsum_dolor sit_amet, consectetuer adipiscing_elit.
Aenean commodo ligulaeget dolor.
EOF

La commande

hexdump -c filetest.txt

donnera

0000000   L   o   r   e   m       i   p   s   u   m   _   d   o   l   o
0000010   r       s   i   t   _   a   m   e   t   ,       c   o   n   s
0000020   e   c   t   e   t   u   e   r       a   d   i   p   i   s   c
0000030   i   n   g   _   e   l   i   t   .  \n   A   e   n   e   a   n
0000040       c   o   m   m   o   d   o       l   i   g   u   l   a   e
0000050   g   e   t       d   o   l   o   r   .  \n
000005b

Alors que la commande

hexdump -C filetest.txt
00000000  4c 6f 72 65 6d 20 69 70  73 75 6d 5f 64 6f 6c 6f  |Lorem ipsum_dolo|
00000010  72 20 73 69 74 5f 61 6d  65 74 2c 20 63 6f 6e 73  |r sit_amet, cons|
00000020  65 63 74 65 74 75 65 72  20 61 64 69 70 69 73 63  |ectetuer adipisc|
00000030  69 6e 67 5f 65 6c 69 74  2e 0a 41 65 6e 65 61 6e  |ing_elit..Aenean|
00000040  20 63 6f 6d 6d 6f 64 6f  20 6c 69 67 75 6c 61 65  | commodo ligulae|
00000050  67 65 74 20 64 6f 6c 6f  72 2e 0a                 |get dolor..|
0000005b

Il est possible de définir un motif pour l’affichage.

Par exemple :

hexdump -v -e '"%010_ad  |" 16/1 "%_p" "|\n"' filetest.txt

qui produira :

0000000000  |Lorem ipsum_dolo|
0000000016  |r sit_amet, cons|
0000000032  |ectetuer adipisc|
0000000048  |ing_elit..Aenean|
0000000064  | commodo ligulae|
0000000080  |get dolor..|

Les paramètres de formatage sont aussi puissants qu’il sont obscure :

hexdump -v  -e '"%08.8_ax  "' -e' 4/1 "%02x " "  " 4/1 "%02x " "  "  4/1 "%02x " "  " 4/1 "%02x "  ' -e '" |" 16/1 "%_p" "|\n"' filetest.txt
00000000  4c 6f 72 65  6d 20 69 70  73 75 6d 5f  64 6f 6c 6f |Lorem ipsum_dolo|
00000010  72 20 73 69  74 5f 61 6d  65 74 2c 20  63 6f 6e 73 |r sit_amet, cons|
00000020  65 63 74 65  74 75 65 72  20 61 64 69  70 69 73 63 |ectetuer adipisc|
00000030  69 6e 67 5f  65 6c 69 74  2e 0a 41 65  6e 65 61 6e |ing_elit..Aenean|
00000040  20 63 6f 6d  6d 6f 64 6f  20 6c 69 67  75 6c 61 65 | commodo ligulae|
00000050  67 65 74 20  64 6f 6c 6f  72 2e 0a                 |get dolor..|


La commande xxd

Une alternative à hexdump est xxd

xxd filetest.txt
00000000: 4c6f 7265 6d20 6970 7375 6d5f 646f 6c6f  Lorem ipsum_dolo
00000010: 7220 7369 745f 616d 6574 2c20 636f 6e73  r sit_amet, cons
00000020: 6563 7465 7475 6572 2061 6469 7069 7363  ectetuer adipisc
00000030: 696e 675f 656c 6974 2e0a 4165 6e65 616e  ing_elit..Aenean
00000040: 2063 6f6d 6d6f 646f 206c 6967 756c 6165   commodo ligulae
00000050: 6765 7420 646f 6c6f 722e 0a              get dolor..

Pour obtenir quelque chose de semblable à hexdump, on peut utiliser sed:

xxd filetest.txt | sed -e ':a;/.\{67\}/!{s/$/ /;ba}' -r -e 's/(................)$/|\1|/g'

Et voilà:

00000000: 4c6f 7265 6d20 6970 7375 6d5f 646f 6c6f  |Lorem ipsum_dolo|
00000010: 7220 7369 745f 616d 6574 2c20 636f 6e73  |r sit_amet, cons|
00000020: 6563 7465 7475 6572 2061 6469 7069 7363  |ectetuer adipisc|
00000030: 696e 675f 656c 6974 2e0a 4165 6e65 616e  |ing_elit..Aenean|
00000040: 2063 6f6d 6d6f 646f 206c 6967 756c 6165  | commodo ligulae|
00000050: 6765 7420 646f 6c6f 722e 0a              |get dolor..     |


Références

ᦿ


ℹ 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog