그래서 저는 다음과 같이 파일에 있는 16진수 값의 바이트 오프셋을 볼 수 있는 놀라운 16진수 모드가 있는 emacs를 사용합니다.
87654321 0011 2233 4455 6677 8899 aabb ccdd eeff 0123456789abcdeff
00000000: 5765 6c63 6f6d 6520 746f 2047 4e55 2045 Welcome to GNU E
이 능력의 팬으로서. 이것이 xxd 또는 hexdump에서 추출할 수 있는 기능인지 궁금하십니까? 또는 누구든지 이 작업을 수행하고 올바르게 정렬할 수 있는 awk 스크립트를 가지고 있는 경우
답변1
내가 가장 좋아하는 사용법 hexdump
은 다음 형식입니다.
hexdump -v -e '"%08_ax "' -e '16/1 "%02X "" "" "' -e '16/1 "%_p""\n"'
이는 다음과 유사한 출력을 제공합니다.
% echo hello there everyone | hexdump -v -e '"%08_ax "' -e '16/1 "%02X "" "" "' -e '16/1 "%_p""\n"'
00000000 68 65 6C 6C 6F 20 74 68 65 72 65 20 65 76 65 72 hello there ever
00000010 79 6F 6E 65 0A yone.
echo
간단히 하나를 앞에 두는 것은 쉽습니다 .
echo hello there everyone | (echo '87654321 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff 0123456789abcdef' ; hexdump -v -e '"%08_ax "' -e '16/1 "%02X "" "" "' -e '16/1 "%_p""\n"')
87654321 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff 0123456789abcdef
00000000 68 65 6C 6C 6F 20 74 68 65 72 65 20 65 76 65 72 hello there ever
00000010 79 6F 6E 65 0A
또는 출력을 "페이지"할 수 있습니다. 예를 들어 16줄마다 헤더를 배치하고 간단한 awk
필터를 사용할 수 있습니다.
cat x | hexdump -v -e '"%08_ax "' -e '16/1 "%02X "" "" "' -e '16/1 "%_p""\n"' | awk '(NR-1)%16 == 0 { print "\n87654321 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff 0123456789abcdef"} ; { print }' | less
87654321 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff 0123456789abcdef
00000000 54 68 69 73 20 69 73 20 6C 69 6E 65 20 31 0A 54 This is line 1.T
00000010 68 69 73 20 69 73 20 6C 69 6E 65 20 32 0A 54 68 his is line 2.Th
00000020 69 73 20 69 73 20 6C 69 6E 65 20 33 0A 54 68 69 is is line 3.Thi
00000030 73 20 69 73 20 6C 69 6E 65 20 34 0A 54 68 69 73 s is line 4.This
00000040 20 69 73 20 6C 69 6E 65 20 35 0A 54 68 69 73 20 is line 5.This
00000050 69 73 20 6C 69 6E 65 20 36 0A 54 68 69 73 20 69 is line 6.This i
00000060 73 20 6C 69 6E 65 20 37 0A 54 68 69 73 20 69 73 s line 7.This is
00000070 20 6C 69 6E 65 20 38 0A 54 68 69 73 20 69 73 20 line 8.This is
00000080 6C 69 6E 65 20 39 0A 54 68 69 73 20 69 73 20 6C line 9.This is l
00000090 69 6E 65 20 31 30 0A 54 68 69 73 20 69 73 20 6C ine 10.This is l
000000a0 69 6E 65 20 31 31 0A 54 68 69 73 20 69 73 20 6C ine 11.This is l
000000b0 69 6E 65 20 31 32 0A 54 68 69 73 20 69 73 20 6C ine 12.This is l
000000c0 69 6E 65 20 31 33 0A 54 68 69 73 20 69 73 20 6C ine 13.This is l
000000d0 69 6E 65 20 31 34 0A 54 68 69 73 20 69 73 20 6C ine 14.This is l
000000e0 69 6E 65 20 31 35 0A 54 68 69 73 20 69 73 20 6C ine 15.This is l
000000f0 69 6E 65 20 31 36 0A 54 68 69 73 20 69 73 20 6C ine 16.This is l
87654321 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff 0123456789abcdef
00000100 69 6E 65 20 31 37 0A 54 68 69 73 20 69 73 20 6C ine 17.This is l
00000110 69 6E 65 20 31 38 0A 54 68 69 73 20 69 73 20 6C ine 18.This is l
"제목"과 내용을 더 쉽게 구별할 수 있도록 거기에 몇 가지 구분 기호를 넣고 싶을 수도 있습니다.
스크립트 작성은 쉽습니다.
% cat hex
#!/bin/sh
hexdump -v -e '"%08_ax "' -e '16/1 "%02X "" "" "' -e '16/1 "%_p""\n"' | awk '(NR-1)%16 == 0 { print "\n87654321 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff 0123456789abcdef\n======== == == == == == == == == == == == == == == == == ================"} ; { print }'
이제 당신은 할 수 있습니다
% hex < x
또는
% cat x | hex
그리고 비슷한 명령.
87654321 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff 0123456789abcdef
======== == == == == == == == == == == == == == == == == ================
00000000 54 68 69 73 20 69 73 20 6C 69 6E 65 20 31 0A 54 This is line 1.T
00000010 68 69 73 20 69 73 20 6C 69 6E 65 20 32 0A 54 68 his is line 2.Th
00000020 69 73 20 69 73 20 6C 69 6E 65 20 33 0A 54 68 69 is is line 3.Thi
00000030 73 20 69 73 20 6C 69 6E 65 20 34 0A 54 68 69 73 s is line 4.This
00000040 20 69 73 20 6C 69 6E 65 20 35 0A 54 68 69 73 20 is line 5.This
00000050 69 73 20 6C 69 6E 65 20 36 0A 54 68 69 73 20 69 is line 6.This i
00000060 73 20 6C 69 6E 65 20 37 0A 54 68 69 73 20 69 73 s line 7.This is
00000070 20 6C 69 6E 65 20 38 0A 54 68 69 73 20 69 73 20 line 8.This is
00000080 6C 69 6E 65 20 39 0A 54 68 69 73 20 69 73 20 6C line 9.This is l
00000090 69 6E 65 20 31 30 0A 54 68 69 73 20 69 73 20 6C ine 10.This is l
000000a0 69 6E 65 20 31 31 0A 54 68 69 73 20 69 73 20 6C ine 11.This is l
000000b0 69 6E 65 20 31 32 0A 54 68 69 73 20 69 73 20 6C ine 12.This is l
000000c0 69 6E 65 20 31 33 0A 54 68 69 73 20 69 73 20 6C ine 13.This is l
000000d0 69 6E 65 20 31 34 0A 54 68 69 73 20 69 73 20 6C ine 14.This is l
000000e0 69 6E 65 20 31 35 0A 54 68 69 73 20 69 73 20 6C ine 15.This is l
000000f0 69 6E 65 20 31 36 0A 54 68 69 73 20 69 73 20 6C ine 16.This is l
87654321 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff 0123456789abcdef
======== == == == == == == == == == == == == == == == == ================
00000100 69 6E 65 20 31 37 0A 54 68 69 73 20 69 73 20 6C ine 17.This is l