Para remover o 0x00, no unix você pode usar:
tr -d 'od -w$1 -v -t x1a $2
'
Para exibir, você pode usar o despejo de objetos (od) e filtrar a saída.
od -w$1 -v -t x1a $2 | awk '$0~/^[0-9A-Fa-f]/ {for (i=2; i<=NF; i++) {printf "%2s ", $i; if (i%2) printf " "}; printf " "; next} {for (i=1; i<=NF; i++) {printf "%4s ", $i; if (!(i%2)) printf " "}; printf "\n"}'
Isso lhe dá a saída bruta que você pode filtrar com o awk (ou outro script).
00000000 23 21 2f 62 69 6e 2f 73 68 0d 0a 0d 0a 23 20 6f |#!/bin/sh....# o|
00000010 64 20 2d 77 24 31 20 2d 76 20 2d 74 20 78 31 61 |d -w$1 -v -t x1a|
00000020 20 24 32 20 7c 20 61 77 6b 20 27 24 30 7e 2f 5e | $2 | awk '$0~/^|
00000030 5b 30 2d 39 41 2d 46 61 2d 66 5d 2f 20 7b 70 72 |[0-9A-Fa-f]/ {pr|
00000040 69 6e 74 66 20 22 25 73 22 2c 20 24 30 20 3b 20 |intf "%s", $0 ; |
00000050 6e 65 78 74 7d 20 7b 70 72 69 6e 74 7d 27 20 7c |next} {print}' ||
00000060 20 73 65 64 20 27 73 2f 5e 5b 30 2d 39 61 2d 66 | sed 's/^[0-9a-f|
00000070 41 2d 46 5d 2a 5b 20 09 5d 2a 2f 2f 27 20 7c 20 |A-F]*[ .]*//' | |
00000080 73 65 64 20 27 73 2f 5b 20 09 5d 5b 20 09 5d 2a |sed 's/[ .][ .]*|
00000090 2f 09 2f 67 27 0d 0a 6f 64 20 2d 77 24 31 20 2d |/./g'..od -w$1 -|
000000a0 76 20 2d 74 20 78 31 61 20 24 32 20 7c 20 61 77 |v -t x1a $2 | aw|
000000b0 6b 20 27 24 30 7e 2f 5e 5b 30 2d 39 41 2d 46 61 |k '$0~/^[0-9A-Fa|
000000c0 2d 66 5d 2f 20 7b 66 6f 72 20 28 69 3d 32 3b 20 |-f]/ {for (i=2; |
000000d0 69 3c 3d 4e 46 3b 20 69 2b 2b 29 20 7b 70 72 69 |i<=NF; i++) {pri|
000000e0 6e 74 66 20 22 25 32 73 20 22 2c 20 24 69 3b 20 |ntf "%2s ", $i; |
000000f0 69 66 20 28 69 25 32 29 20 70 72 69 6e 74 66 20 |if (i%2) printf |
00000100 22 20 22 7d 3b 20 70 72 69 6e 74 66 20 22 20 20 |" "}; printf " |
00000110 22 3b 20 6e 65 78 74 7d 20 7b 66 6f 72 20 28 69 |"; next} {for (i|
00000120 3d 31 3b 20 69 3c 3d 4e 46 3b 20 69 2b 2b 29 20 |=1; i<=NF; i++) |
00000130 7b 70 72 69 6e 74 66 20 22 25 34 73 20 22 2c 20 |{printf "%4s ", |
00000140 24 69 3b 20 69 66 20 28 21 28 69 25 32 29 29 20 |$i; if (!(i%2)) |
00000150 70 72 69 6e 74 66 20 22 20 20 22 7d 3b 20 70 72 |printf " "}; pr|
00000160 69 6e 74 66 20 22 5c 6e 22 7d 27 0d 0a |intf "\n"}'..|
0000016d
Substitua $ 2 pela quantidade de bytes que você deseja exibir.
Dá o primeiro passo, então você precisa filtrar cada segundo byte (0x00)
Espero que isso ajude.
O exemplo abaixo está em ascii simples, mas fazer isso em um arquivo de 2 bytes seria o mesmo.
tr -d 'od -w$1 -v -t x1a $2
'