as는 $ hexdump -C data
파일의 16진수 내용을 한 줄에 16바이트로 인쇄합니다.
그렇다면 옵션을 설정하여 Ascii 0a(새 줄)가 나타날 때마다 어떻게 줄을 인쇄할 수 있습니까?
답변1
입력의 각 줄(또는 0x2a()로 구분된 레코드)의 출력에 16진수 덤프 줄을 원하는 경우 실제로 A bit를 사용하여 이를 수행할 수 는 *
없지만 hexdump
Perl로 코딩하기가 상대적으로 쉽습니다.
lhexdump() {
perl -ne '
printf "%08x %s |%s|\n",
$offset,
join(" ", unpack("(H2)*", $_)),
s/[^[:print:]]/./rg;
$offset = tell ARGV;
END{printf "%08x\n", $offset}' -- "$@"
}
8개의 그룹에서 16진수를 분리하려는 시도도 없고, 끝 부분의 텍스트 섹션을 정렬하려는 시도도 없으며, 그런 중복을 건너뛰려는 시도도 없습니다 hexdump
.
$ printf 'a\xff1\n**\n\b' | lhexdump
00000000 61 ff 31 0a |a.1.|
00000004 2a 2a 0a |**.|
00000007 08 |.|
00000008
*
- 구분 레코드 의 경우 -052
옵션 을 추가합니다 perl
(8진수 52는 16진수 0x2a임).
여전히 각 출력 라인을 최대 16바이트로 제한합니다(그리고 출력을 정렬할 수 있음).
lhexdump() {
perl -ne '
while ($_ ne "") {
my $chunk = substr($_, 0, 16);
$_ = substr($_, 16);
printf "%08x %-47s |%s|\n",
$offset,
join(" ", unpack("(H2)*", $chunk)),
$chunk =~ s/[^[:print:]]/./rg;
$offset += length($chunk);
}
END{printf "%08x\n", $offset}' -- "$@"
}
$ head -n4 /etc/passwd | lhexdump
00000000 72 6f 6f 74 3a 78 3a 30 3a 30 3a 72 6f 6f 74 3a |root:x:0:0:root:|
00000010 2f 72 6f 6f 74 3a 2f 62 69 6e 2f 62 61 73 68 0a |/root:/bin/bash.|
00000020 64 61 65 6d 6f 6e 3a 78 3a 31 3a 31 3a 64 61 65 |daemon:x:1:1:dae|
00000030 6d 6f 6e 3a 2f 75 73 72 2f 73 62 69 6e 3a 2f 75 |mon:/usr/sbin:/u|
00000040 73 72 2f 73 62 69 6e 2f 6e 6f 6c 6f 67 69 6e 0a |sr/sbin/nologin.|
00000050 62 69 6e 3a 78 3a 32 3a 32 3a 62 69 6e 3a 2f 62 |bin:x:2:2:bin:/b|
00000060 69 6e 3a 2f 75 73 72 2f 73 62 69 6e 2f 6e 6f 6c |in:/usr/sbin/nol|
00000070 6f 67 69 6e 0a |ogin.|
00000075 73 79 73 3a 78 3a 33 3a 33 3a 73 79 73 3a 2f 64 |sys:x:3:3:sys:/d|
00000085 65 76 3a 2f 75 73 72 2f 73 62 69 6e 2f 6e 6f 6c |ev:/usr/sbin/nol|
00000095 6f 67 69 6e 0a |ogin.|
0000009a
비교:
$ head -n4 /etc/passwd | hexdump -C
00000000 72 6f 6f 74 3a 78 3a 30 3a 30 3a 72 6f 6f 74 3a |root:x:0:0:root:|
00000010 2f 72 6f 6f 74 3a 2f 62 69 6e 2f 62 61 73 68 0a |/root:/bin/bash.|
00000020 64 61 65 6d 6f 6e 3a 78 3a 31 3a 31 3a 64 61 65 |daemon:x:1:1:dae|
00000030 6d 6f 6e 3a 2f 75 73 72 2f 73 62 69 6e 3a 2f 75 |mon:/usr/sbin:/u|
00000040 73 72 2f 73 62 69 6e 2f 6e 6f 6c 6f 67 69 6e 0a |sr/sbin/nologin.|
00000050 62 69 6e 3a 78 3a 32 3a 32 3a 62 69 6e 3a 2f 62 |bin:x:2:2:bin:/b|
00000060 69 6e 3a 2f 75 73 72 2f 73 62 69 6e 2f 6e 6f 6c |in:/usr/sbin/nol|
00000070 6f 67 69 6e 0a 73 79 73 3a 78 3a 33 3a 33 3a 73 |ogin.sys:x:3:3:s|
00000080 79 73 3a 2f 64 65 76 3a 2f 75 73 72 2f 73 62 69 |ys:/dev:/usr/sbi|
00000090 6e 2f 6e 6f 6c 6f 67 69 6e 0a |n/nologin.|
0000009a
답변2
보고 있다매뉴얼 페이지, hexdump
조건부로 한 줄을 인쇄하는 옵션이 없습니다.
포함된 행을 인쇄하고 싶다고 가정 2a
하고 다음을 사용하십시오 grep
.
hexdump -C data | grep 2a