hexdump는 Ascii 0a가 도착할 때마다 한 줄을 인쇄합니다.

hexdump는 Ascii 0a가 도착할 때마다 한 줄을 인쇄합니다.

as는 $ hexdump -C data파일의 16진수 내용을 한 줄에 16바이트로 인쇄합니다.

그렇다면 옵션을 설정하여 Ascii 0a(새 줄)가 나타날 때마다 어떻게 줄을 인쇄할 수 있습니까?

답변1

입력의 각 줄(또는 0x2a()로 구분된 레코드)의 출력에 16진수 덤프 줄을 원하는 경우 실제로 A bit를 사용하여 이를 수행할 수 는 *없지만 hexdumpPerl로 코딩하기가 상대적으로 쉽습니다.

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

관련 정보