Jak utworzyć niezmodyfikowany zrzut heksadecymalny pliku binarnego w systemie Linux za pomocą bash? od
I hexdump
polecenia obydwa pomieszczenia wstawić do wyrzucenia, a to nie jest idealny.
Czy istnieje sposób, aby po prostu napisać długi ciąg ze wszystkimi znakami szesnastkowymi, minus spacje lub znaki nowej linii na wyjściu?
Odpowiedzi:
xxd -p file
Lub jeśli chcesz wszystko w jednym wierszu:
xxd -p file | tr -d '\n'
źródło
Ciągi formatujące mogą sprawić, że zrzut szesnastkowy będzie działał dokładnie tak, jak chcesz (w ogóle nie ma białych znaków, bajt po bajcie):
1/1
oznacza „każdy format jest stosowany raz i zajmuje jeden bajt” i"%.2x"
jest łańcuchem formatu, tak jak w printf. W tym przypadku: 2-znakowa liczba szesnastkowa, zera wiodące, jeśli są krótsze.źródło
-v
znaku lub spowoduje to usunięcie powtarzających się bajtów i zastąpienie ich gwiazdką.; echo
pozwala na użycie jako aliasu bash)alias to_hex="hexdump -ve '1/1 \"%.2x\"' && echo"
hexdump -ve '"%.2x"'
hexdump -n 13 -e '13/1 "%.2x" "\n"'
Wydaje się, że zależy to od szczegółów wersji
od
. W systemie OSX użyj tego:(To jest drukowane jako bajty szesnastkowe typu, bez adresu. I oczywiście później usuwane białe znaki).
źródło
-v
w tym kontekście, w przeciwnym razie pominie powtórzenia*
.Perl One-Liner:
źródło
Inne odpowiedzi są preferowane, ale dla czystego rozwiązania Bash zmodyfikowałem skrypt w odpowiedzi tutaj, aby móc wyświetlać ciągły strumień znaków szesnastkowych reprezentujących zawartość pliku. (Jego normalnym trybem jest emulacja
hexdump -C
.)źródło