如何在 Linux 上对流中的不可打印字符进行十六进制转义?

问题描述 投票:0回答:1

我正在一个普通的 GNU Linux 系统上工作,该系统具有 coreutils 等可用的标准工具。将随机流中的不可打印序列转换为十六进制序列的常见简单高性能方法是什么?

我们以 wtmp 二进制文件为例。理想情况下我想要:

$ dd if=/var/log/wtmp bs=1 count=20 status=none | somecommand
\x02\x00\x00\x00\x00\x00\x00\x00~\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00

我能想到的最接近的是 python,但是

b'
'
仍然需要删除。 shell 或 coreutils 中是否有一些不是 python 的工具可以做到这一点?

 $ dd if=/var/log/wtmp bs=1 count=20 status=none | python -c 'import sys;print(sys.stdin.buffer.read())'
 b'\x02\x00\x00\x00\x00\x00\x00\x00~\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

有没有像

cat -v
一样简单的东西只生成十六进制转义符而不是插入符序列?

我知道

xxd -i
hexdump -e '"%_c"'
。是否可以使用
\x
并仅转义不可打印的字符?

我尝试过研究,但我的 google-fu 主要以关于在 bash 中将十六进制转换为 ascii 的帖子结束,而我想要相反的方式。我无法找到或想出令人满意的解决方案。

linux bash shell hex
1个回答
0
投票
GNU coreutils 的

pr
可以进行八进制:

$ head -c 20 /dev/urandom | pr -tTv
\035EGqlD\321\255\2750\345\227\316T$\225T\360\003H

我不知道是否有做十六进制的。

© www.soinside.com 2019 - 2024. All rights reserved.