使用HexDump仅输出ASCII



我正在尝试输出与某些二进制数据相对应的ASCII值。我已经成功地将hexdump实用程序应用于以下输出hexdump和ASCII,如下所示:

00000120  20 20 20 20 3d 20 30 78  30 30 30 30 30 30 33 30  |    = 0x00000030|
00000130  0a 01 00 00 00 23 00 00  00 75 75 69 64 30 20 20  |.....#...uuid0  |
00000140  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3d  |               =|
00000150  20 30 78 39 30 38 32 61  63 35 61 0a 01 00 00 00  | 0x9082ac5a.....|
00000160  23 00 00 00 75 75 69 64  31 20 20 20 20 20 20 20  |#...uuid1       |
00000170  20 20 20 20 20 20 20 20  20 20 3d 20 30 78 37 34  |          = 0x74|
00000180  61 37 34 37 36 66 0a 01  00 00 00 23 00 00 00 75  |a7476f.....#...u|
00000190  75 69 64 32 20 20 20 20  20 20 20 20 20 20 20 20  |uid2            |
000001a0  20 20 20 20 20 3d 20 30  78 61 32 35 35 35 63 30  |     = 0xa2555c0|

但是,我只想将ASCII视为输出值。我对十六进制值不感兴趣。例如,输出应为以下(大约对应于上述):

= 0x00000030.....#...
uuid0=0x9082ac5a.....
uuid1=0x74a7476f

(我无法将hd的开关用于此。)

如果您只需要查看二进制文件的文本内容,字符串应该有用:

对于给出的每个文件,gnu strings打印可打印字符 序列至少4个字符长(或给出的数字 带有-n选项),然后是一个无法打印的字符。 strings主要用于确定非文本的内容 文件。

,而Raina77OW关于strings(1)命令的答案是获得您真正想要的结果的正确方法,而利用hexdump(1)仅过滤出可打印字符的特定请求在某些情况下可能有意义。我将在这里具体回应。

Hexdump实用程序证明了一个令人惊叹的普遍格式化引擎。这可能是为了使各种可选格式的实现更加均匀。如果您的Hexdump副本通过-e命令行选项暴露了该引擎(像许多人一样),那么您实际上可以让它执行您的要求。

关键是-e选项及其支持的格式语言。该语言允许指定消耗输入字节并产生文本的格式字符串。诸如:

之类的命令
$ hexdump -e "16 "%_p" "\n"" hexdump.exe | head -16

一次消耗16个字节,通过%_p格式显示它们,并在每个16个字节后添加一个newline。输出中的每个不可打印字符被.取代。

其他面向角色的格式是%_c%_u。第一个用ANSI-C逃脱序列或三位数八分位数代替了非打印字符。第二个将非打印每个字符替换为ASCII控制字符的常规名称,或用两位数的十六进制数字替换。

如果您的hexdump副本缺乏-e选项,或者速度很慢,或者您根本没有hexdump的实现,那么William Ahern最近发布的hexdump的自由许可,快速且合理的便携式实现值得一看。它应该为开箱即用的许多类似Unix的系统构建,并且仅通过窗口上的MingW GCC进行较小的调整。此实现的关键属性是,可以将单源文件作为共享库构建,以包含在另一个程序中,作为lua使用的LUA模块,以及实现hexdump命令的独立可执行文件。

<</p> <</p> <</p>

您可以使用OD:

od -t c file

awk with hexdump喜欢:

hexdump -C file | awk '{for(i=NF; i>17; --i) print $i}'

注意:如果您更改hexdump中的列数,则必须更改awk命令。

hexdump -C file /dev/sda4|cut -c 62-77

希望它有帮助

最新更新