如何从十六进制转储输出中删除除数字之外的所有内容?

0 command-line text-processing

我得到了base64一个巨大文件的输出,输出显然也很大,并且在它自己的文件中,我想将其中的大数字转换为base10所以我现在已经习惯hexdump将其转换为base16格式......但是输出看起来像这样:

0077000 0022 00de 0000 0000 de00 0800 0000 0000
0077010 0008 0473 0c16 221f 0200 0000 0001 0100
0077020 0001 0022 00de 0000 0000 de00 0800 0000
0077030 0000 0008 0473 0c16 221f 0200 0000 0001
0077040 0100 0101 0032 00df 0000 0000 df00 0800
0077050 0000 0000 0008 0473 0c16 221f 0200 0000
0077060 0001 0100 0010 0073 006c 002d 006d 006f
0077070 0064 0065 006d 0000 0000 0000 0000 0000
0077080 0000 0000 0000 0000 0000 0000 0000 0000
*
0077800 0022 00df 0000 0000 df00 0800 0000 0000
0077810 0008 0473 0c16 221f 0200 0000 0001 0100
0077820 0001 0022 00df 0000 0000 df00 0800 0000
0077830 0000 0008 0473 0c16 221f 0200 0000 0001
0077840 0100 0101 0078 d690 0008 0800 90d6 961a
0077850 0006 0600 1a96 0473 0c16 221f 0000 0000
0077860 0001 0100 0056 0073 006c 002d 006d 006f
0077870 0064 0065 006d 002d 0064 0061 0065 006d
0077880 006f 006e 005f 0032 002e 0039 002e 0031
0077890 0031 007e 0032 0030 0031 0031 0030 0033
00778a0 0032 0031 002d 0031 0031 005f 0069 0033
00778b0 0038 0036 002e 0064 0065 0062 0000 0000
00778c0 0000 0000 0000 0000 0000 0000 0000 0000
*
Run Code Online (Sandbox Code Playgroud)

我知道如何删除所有空格并返回并将其全部放在一行上,但是如何将星星变成它们代表的已删除行并删除不属于数字的前 8 个字符?或者有没有办法hexdump只输出数字而不是所有其他东西?该文件显然太大了,我无法手动完成,因此非常感谢自动执行此操作的命令。我正在使用 GNOME 3.18 运行 Ubuntu GNOME 15.10。

Ser*_*nyy 6

您可以使用xxd创建普通样式的十六进制转储

$ xxd -p /etc/passwd | head -n 3                                                                                      
726f6f743a783a303a303a726f6f743a2f726f6f743a2f62696e2f626173
680a6461656d6f6e3a783a313a313a6461656d6f6e3a2f7573722f736269
6e3a2f7573722f7362696e2f6e6f6c6f67696e0a62696e3a783a323a323a
Run Code Online (Sandbox Code Playgroud)

并将其输出到文件

$ xxd -p /etc/passwd > output.hex
Run Code Online (Sandbox Code Playgroud)

您可以稍后使用-r -p选项恢复数据

$ xxd -r -p output.hex  | head -n 3                                                                                   
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
Run Code Online (Sandbox Code Playgroud)

夫妇其他方法:

$ hexdump -ve '1/1 "%.2x"' /etc/passwd
$  od -t x1 /etc/passwd | awk '{$1=""; gsub(/\ /,"");print}'
Run Code Online (Sandbox Code Playgroud)


kos*_*kos 6

使用hexdump指定自定义输出格式:

hexdump -ve '8/1 "%04x " "\n"'
Run Code Online (Sandbox Code Playgroud)
  • -v:打印所有数据(去掉星号,这意味着重复最后一行输出)
  • -e '8/1 "%04x " "\n"':以零填充(最多四位)小写十六进制表示形式打印 8 次单个字节,后跟一个空格并附加换行符,直到没有更多数据可用。
% </dev/urandom head -c 32 | hexdump -ve '8/1 "%04x " "\n"'
003c 00b0 00bb 00de 003d 0041 0072 00a5
00c2 0078 00b9 009b 00b7 00fc 0076 0030
00b7 005c 00f4 0036 00a0 004e 003b 001b
0028 00cd 006a 0079 0055 0014 000c 007b
Run Code Online (Sandbox Code Playgroud)

我不确定你为什么要这样做,但显然你想将所有内容打印在一行上,不带空格。

如果是这样的话:

hexdump -ve '/1 "%04x"'
Run Code Online (Sandbox Code Playgroud)
% </dev/urandom head -c 32 | hexdump -ve '/1 "%04x"'
0046007c00b2003300e0009b00eb00d500bf006900570081008e003e005a002f0024001700ab00000084001e00ad00ab003a004800bf0039005c00aa00030072%
% 
Run Code Online (Sandbox Code Playgroud)