Utiliser hexdump pour générer uniquement des fichiers ASCII

J’essaie de sortir des valeurs ASCII correspondant à certaines données binarys. J’ai appliqué l’utilitaire hexdump avec succès pour produire hexdump et ASCII côte à côte comme ci-dessous:

 00000120 20 20 20 20 3d 20 30 78 30 30 30 30 30 30 33 30 | = 0x00000030| 00000130 0a 01 00 00 00 23 00 00 00 75 75 69 64 30 20 20 |.....#...uuid0 | 00000140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3d | =| 00000150 20 30 78 39 30 38 32 61 63 35 61 0a 01 00 00 00 | 0x9082ac5a.....| 00000160 23 00 00 00 75 75 69 64 31 20 20 20 20 20 20 20 |#...uuid1 | 00000170 20 20 20 20 20 20 20 20 20 20 3d 20 30 78 37 34 | = 0x74| 00000180 61 37 34 37 36 66 0a 01 00 00 00 23 00 00 00 75 |a7476f.....#...u| 00000190 75 69 64 32 20 20 20 20 20 20 20 20 20 20 20 20 |uid2 | 000001a0 20 20 20 20 20 3d 20 30 78 61 32 35 35 35 63 30 | = 0xa2555c0| 

Cependant, je voudrais voir uniquement les ASCII comme valeurs de sortie. Je ne suis pas intéressé par les valeurs hexadécimales. Par exemple, le résultat devrait être le suivant (approximativement correspondant à ce qui précède):

 = 0x00000030.....#... uuid0=0x9082ac5a..... uuid1=0x74a7476f 

(Je n’ai pas pu utiliser les commutateurs de hd pour cela.)

Si vous avez seulement besoin de voir le contenu du fichier binary, les chaînes doivent être utiles:

Pour chaque fichier donné, les ssortingngs GNU impriment les séquences de caractères imprimables qui ont au moins 4 caractères (ou le nombre indiqué avec l’option -n ) et sont suivies d’un caractère non imprimable. ssortingngs est principalement utile pour déterminer le contenu de fichiers non textuels.

Bien que la réponse de raina77ow à propos de la commande ssortingngs(1) soit la manière correcte d’obtenir le résultat souhaité, la demande spécifique d’exploiter hexdump(1) pour filtrer uniquement les caractères imprimables peut avoir un sens dans certains contextes. Je vais répondre à cela spécifiquement ici.

L’utilitaire hexdump s’avère prendre en charge un moteur de mise en forme étonnamment généralisé. Cela a probablement été fait pour uniformiser la mise en œuvre des différents formats sélectionnables. Si votre copie de hexdump expose ce moteur (comme beaucoup le font) via l’option de ligne de commande -e , vous pouvez réellement le faire faire ce que vous avez demandé.

La clé est l’option -e et le langage de formatage pris en charge. Ce langage permet de spécifier des chaînes de format qui consumnt des octets de l’entrée et produisent du texte. Une commande telle que:

 $ hexdump -e "16 \"%_p\" \"\\n\"" hexdump.exe | head -16 

consum 16 octets à la fois, les affiche via le format %_p et ajoute une nouvelle ligne après chaque 16 octet. Chaque caractère non imprimable est remplacé par un . dans la sortie.

Les autres formats orientés caractères à prendre en compte sont %_c et %_u . Le premier remplace le caractère non imprimable par leur séquence d’échappement ANSI-C ou par un nombre octal à trois chiffres. La seconde remplace chaque caractère non imprimable par le nom conventionnel du caractère de contrôle ASCII ou par un nombre hexadécimal à deux chiffres.

Si votre copie de hexdump n’a pas l’option -e , ou est lente, ou si vous n’avez pas du tout d’implémentation de hexdump , l’implémentation libérée par licence, rapide et raisonnablement portable de hexdump récemment publiée par William Ahern mérite d’être hexdump . Il devrait être conçu pour un grand nombre de systèmes Unix-like, et ne nécessitera que quelques modifications mineures avec MingW GCC sous Windows. Un atsortingbut clé de cette implémentation est que le fichier source unique peut être créé en tant que bibliothèque partagée pour être inclus dans un autre programme, en tant que module Lua pour Lua , ainsi que comme exécutable autonome implémentant la commande hexdump .

vous pouvez utiliser od :

 od -tc file 

Ou awk avec hexdump comme ça:

 hexdump -C file | awk '{for(i=NF; i>17; --i) print $i}' 

Remarque: vous devez modifier la commande awk si vous modifiez le nombre de colonnes dans hexdump.

 hexdump -C file /dev/sda4|cut -c 62-77 

J’espère que cela aide