如何拆分长十六进制字符串

如何拆分长十六进制字符串

我有一个长十六进制字符串 00121eafc5800020...等等。

有没有一种简单的方法可以让我将这些十六进制编码字节用空格分隔开,这样我在 vim (或其他易于访问的工具)中得到 00 12 1e af c5 80 00 20

答案1

$ sed 's/\(..\)/\1 /g' <<< '1234567890'
12 34 56 78 90 

答案2

尝试这个按键序列(从数字开始):( q1lxPpr lq@1@1@1@1@1@1@1@1等等,或者说,20@1)

答案3

在 中vim,您可以使用:s/\([0-9a-f][0-9a-f]\)/\1 /g来执行所需的操作。要测试这一点,您可以使用以下命令:

dd bs=512 if=/dev/urandom count=2 2>/dev/null | xxd -p | tr -d '\n' | vim -

然后在 中vim,使用:s/\([0-9a-f][0-9a-f]\)/\1 /g在每对十六进制字符后添加一个空格。这是一个小例子:

$ dd bs=32 if=/dev/urandom count=1 2>/dev/null | xxd -p | tr -d '\n' | vim -
6aad5f800a739fadbc3e2312230daeca8055491577b0e0d75a37bb3777f0a3e0
:s/\([0-9a-f][0-9a-f]\)/\1 /g
6a ad 5f 80 0a 73 9f ad bc 3e 23 12 23 0d ae ca 80 55 49 15 77 b0 e0 d7 5a 37 bb 37 77 f0 a3 e0 

答案4

:%s/\x\x/& /g

足够。

如果要切成几条线,也可以:substitute先应用这个。

:%s/\x\{16}/&\r/g

或者如果你更喜欢单行(我不确定这是否是一个更好的解决方案)

:%s/\x\{16}/\=substitute(submatch(0), '\x\x', '& ', 'g')."\n"/g

相关内容