Usuń dane ze środka pliku binarnego w trybie szesnastkowym

13

Mam dość duży plik binarny (kilkadziesiąt MB) i chciałbym usunąć kilka KB gdzieś pośrodku, to dane umieszczone na początku nie koniec ani koniec.

Idealnie chciałbym użyć emacsa, a tryb hexl wydaje się prawdopodobnym kandydatem.

Czy można usunąć jedną linię z bufora hexl? Ctrl- knie wydaje się wykonywać pracy. Z przyjemnością patrzę na kod, ale z jakiegokolwiek powodu szukając trybu hexl.el wszystko, co znajduję, to skompilowany plik .elc na mojej maszynie Ubuntu 10.04 Emacs 23.1.

Dodatkowo: podstępnym ruchem chciałbym dodać kolejne pytanie w trybie szesnastkowym, które nie jest bezpośrednio związane z pytaniem sformułowanym w tytule, ale jest częścią kompletnego problemu, przed którym stoję: Byłoby bardzo przydatne, gdyby Mógłbym wyświetlić X znaków szesnastkowych w wierszu, gdzie X oczywiście zmienia się wraz z formatem pliku binarnego, który edytuję, nie mogłem znaleźć sposobu na zrobienie tego w trybie szesnastkowym i pomyślałem, że tu rzucę pytanie.

Mcradle
źródło

Odpowiedzi:

9

Tryb Hexl nie pozwala na usuwanie znaków. Ta odpowiedź z przepełnienia stosu sugeruje obejście: zastąp znaki, które chcesz usunąć, innym znakiem (powiedz „X”), wyłącz tryb szesnastkowy, znajdź znaki i usuń je.

Anne
źródło
4

Użyj trybu nhexl (który można zainstalować jako pakiet z ELPA). Tryb Nhexl jest trybem podrzędnym; tekst pozostaje edytowalny w głównym trybie, w którym bufor był już włączony.

Domyślnie tryb nhexl aktywuje tryb nadpisywania, ale nadal można go usunąć. Aby wstawić tekst, wyłącz tryb zastępowania za pomocą M-x binary-overwrite-mode.

Możesz umieścić następujący fragment kodu w pliku init ( ~/.emacs), aby powiązać Insertklucz z przełączanym trybem nadpisywania w trybie 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)

To może być interesujące, jeśli używasz nhexl-mode.

Gilles „SO- przestań być zły”
źródło