如何在 bash 中创建仅包含十六进制字符且不包含空格的文件的十六进制转储?
- 2024-10-22 08:29:00
- admin 原创
- 91
问题描述:
如何使用 bash 在 Linux 中创建二进制文件的未修改od
十六进制转储?和hexdump
命令都会在转储中插入空格,这并不理想。
有没有办法在输出中简单地写一个包含所有十六进制字符、减去空格或换行符的长字符串?
解决方案 1:
xxd -p file
或者如果你想要将所有内容放在一行上:
xxd -p file | tr -d '
'
解决方案 2:
格式字符串可以使 hexdump 的行为完全按照您希望的方式进行(完全没有空格,逐字节):
hexdump -ve '1/1 "%.2x"'
1/1
表示“每种格式应用一次并占用一个字节”,"%.2x"
是实际的格式字符串,就像 printf 中一样。在这种情况下:2 个字符的十六进制数,如果较短则以零开头。
解决方案 3:
这似乎取决于 版本的详细信息od
。在 OSX 上,使用以下命令:
od -t x1 -An file |tr -d '
'
(这是以十六进制字节类型打印的,没有地址。当然,之后会删除空格。)
解决方案 4:
Perl 单行代码:
perl -e 'local $/; print unpack "H*", <>' file
解决方案 5:
您可以使用 Python 来实现此目的:
python -c "print(open('file.bin','rb').read().hex())"
...file.bin
你的文件名在哪里。
解释:
file.bin
以rb
(读取二进制)模式打开。读取内容(作为
bytes
对象返回)。使用
bytes
方法.hex()
,返回没有空格或换行符的十六进制转储。打印输出。
解决方案 6:
其他答案是更好的选择,但是对于纯 Bash 解决方案,我修改了此处答案中的脚本,以便能够输出代表文件内容的连续十六进制字符流。 (其正常模式是模拟hexdump -C
。)
解决方案 7:
此代码生成“纯”十六进制转储字符串,并且运行速度比给出的所有其他示例都快。它已在填充二进制零和所有换行符的 1GB 文件上进行了测试。它不依赖于数据内容,并且读取 1MB 记录而不是行。
perl -pe 'BEGIN{$/=e6} $_=unpack "H*"'
数十次计时测试表明,对于 1GB 文件,以下其他方法速度较慢。所有测试都是通过将输出写入文件然后通过校验和进行验证来运行的。测试了三个 1GB 输入文件:所有字节、所有二进制零和所有 LF。
hexdump -ve '1/1 "%.2x"' # ~10x slower
od -v -t x1 -An | tr -d "
" # ~15x slower
xxd -p | tr -d \\n # ~3x slower
perl -e 'local $/; print unpack "H*", <>' # ~1.5x slower
- this also slurps the whole file into memory
要逆转这一过程:
perl -pe 'BEGIN{$/=e6} $_=pack "H*",$_'
解决方案 8:
太长不看;
$ od -t x1 -A n -v <empty.zip | tr -dc '[:xdigit:]' && echo
504b0506000000000000000000000000000000000000
$
解释:
使用该od
工具打印单个十六进制字节 ( -t x1
) --- 不带地址偏移 ( -A n
) 也不省略重复的“组” (-v)
--- 来自empty.zip
,已重定向到标准输入。将 that 管道传输到tr
which 会删除 ( )十六进制字符集 ( ) 的-d
补码( )。您可以像我在这里所做的那样打印尾随换行符 ( ),以将输出与下一个 shell 提示符分开。-c
`'[:xdigit:]'`echo
参考:
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/od.html
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/tr.html
解决方案 9:
我认为这是得到最广泛支持的版本(仅需要 POSIX 定义tr
和od
行为):
cat "$file" | od -v -t x1 -A n | tr -d '
'
这用于od
将每个字节打印为十六进制,不带地址,不跳过重复的字节,并tr
删除输出中的所有空格和换行符。请注意,这里甚至不发出尾随的换行符。(这cat
是有意允许多核处理,在多核处理中,cat
可以等待文件系统,同时od
仍在处理先前读取的部分。单核用户可能希望将其替换为,以< "$file" od ...
避免启动一个额外的进程。)
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件