使用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作为输出值。 我对hex值不感兴趣。 例如,输出结果应该如下(大约相应于上面的):

 = 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个字节之后添加一个换行符。 每个不可打印的字符被替换为一个. 在输出中。

其他面向字符的格式要考虑的是%_c%_u 。 第一个用它们的ANSI-C转义序列或三位八进制数字替换非打印字符。 第二个替换为用ASCII控制字符的常规名称或两位十六进制数字不打印每个字符。

如果你的hexdump副本缺少-e选项,或者速度很慢,或者你根本就没有执行hexdump ,那么William Ahern最近发布的hexdump的自由授权,快速和合理的可移植实现值得一看。 它应该为许多类Unix系统开箱,而且只需要在Windows上使用MingW GCC进行微小的调整。 这个实现的一个关键属性是单个源文件可以被构建为共享库以包含在另一个程序中,作为Lua使用的Lua模块以及实现hexdump命令的独立可执行文件。

你可以使用od :

 od -tc file 

或者awkhexdump像这样:

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

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

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

希望能帮助到你