Supprimer les données du milieu d'un fichier binaire avec le mode hexl

12

J'ai un fichier binaire assez volumineux (quelques dizaines de Mo) et je voudrais supprimer quelques Ko quelque part au milieu, ce sont des données prises en sandwich, ni le début ni la fin.

Idéalement, j'aimerais utiliser emacs et le mode hexl semble être un candidat probable.

Est-il possible de supprimer une ligne du tampon hexl? Ctrl- kne semble pas faire le travail. Je suis heureux de regarder le code mais pour quelque raison que ce soit à la recherche de hexl-mode.el, je ne trouve que le fichier compilé .elc sur ma machine Ubuntu 10.04 Emacs 23.1.

De plus: dans un mouvement sournois, je voudrais ajouter une autre question en mode hexl qui n'est pas directement liée à la question telle que formulée dans le titre mais fait partie du problème complet auquel je suis confronté: il serait très utile pour moi si Je pouvais afficher X caractères hexadécimaux par ligne où X change évidemment avec le format du fichier binaire que je modifie, je n'ai pas pu trouver un moyen de le faire avec le mode hexl et j'ai pensé poser la question ici.

Mcradle
la source

Réponses:

9

Le mode Hexl ne vous permet pas de supprimer des caractères. Cette réponse du débordement de pile suggère une solution de contournement: remplacez les caractères que vous souhaitez supprimer par un autre caractère (dites "X"), passez du mode hexl, trouvez les caractères et supprimez-les là.

Anne
la source
3

Utilisez le mode nhexl (qui peut être installé en tant que package à partir d'ELPA). Le mode Nhexl est un mode mineur; le texte reste modifiable dans le mode principal dans lequel le tampon était déjà.

Par défaut, le mode nhexl active le mode d'écrasement, mais vous pouvez toujours le supprimer. Pour insérer du texte, désactivez le mode d'écrasement avec M-x binary-overwrite-mode.

Vous pouvez placer l'extrait de code suivant dans votre fichier init ( ~/.emacs) pour lier la Insertclé au basculement du mode d'écrasement en mode nhexl.

(unless (boundp 'nhexl-mode-map)
  (defvar nhexl-mode-map (make-sparse-keymap)
    "Keymap used when `nhexl-mode' is active."))
(define-key nhexl-mode-map [insert] 'binary-overwrite-mode)

Cela peut également être intéressant si vous utilisez le mode nhexl.

Gilles 'SO- arrête d'être méchant'
la source