$ sed 's/\(..\)/ /g' <<< '1234567890'
12 34 56 78 90
Eu tenho uma longa string hexadecimal 00121eafc5800020 ... etc.
Existe uma maneira fácil de dividir isso com um espaço por byte codificado por hex 00 12 1e af c5 80 00 20 no vim (ou outra ferramenta de fácil acesso)
Tente esta sequência de teclas (desde o início do número):
q1lxPpr lq@1@1@1@1@1@1@1@1
(etc. ou digamos, 20 @ 1)
Em vim
, você pode usar :s/\([0-9a-f][0-9a-f]\)/ /g
para fazer o que quiser. Para testar isso, você pode usar o seguinte comando:
dd bs=512 if=/dev/urandom count=2 2>/dev/null | xxd -p | tr -d '\n' | vim -
Em seguida, em vim
, use :s/\([0-9a-f][0-9a-f]\)/ /g
para adicionar um espaço após cada par de caracteres hexadecimais. Aqui está um pequeno exemplo:
$ 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]\)/ /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
:%s/\x\x/& /g
é o suficiente.
Se você quiser cortar várias linhas, você também pode aplicar esse :substitute
primeiro.
:%s/\x\{16}/&\r/g
Ou se você preferir um one-liner (não tenho certeza de que essa é uma solução melhor aqui)
:%s/\x\{16}/\=substitute(submatch(0), '\x\x', '& ', 'g')."\n"/g