听起来你想转换
xxd -b
输出返回初始值
hello world
字符串?
[STEP 103] # echo hello, world | xxd -b
00000000: 01101000 01100101 01101100 01101100 01101111 00101100 hello,
00000006: 00100000 01110111 01101111 01110010 01101100 01100100 world
0000000c: 00001010 .
[STEP 104] # echo hello, world | xxd -b \
| sed -E -e 's/.*:(( [01]+){0,6}).*/\1/' \
-e 's/ ([01]+)/ $((2#\1))/g' \
| xargs bash -c 'eval printf %02x "$@" ' _ \
| xxd -p -r
hello, world
[STEP 105] #
(您需要更新
sed
如果命令不支持
-E
)
一步一步地:
[STEP 106] # echo xyz | xxd -b
00000000: 01111000 01111001 01111010 00001010 xyz.
[STEP 107] # echo xyz | xxd -b | sed -E -e 's/.*:(( [01]+){0,6}).*/\1/' \
-e 's/ ([01]+)/ $((2#\1))/g'
$((2#01111000)) $((2#01111001)) $((2#01111010)) $((2#00001010))
[STEP 108] # echo xyz | xxd -b | sed -E -e 's/.*:(( [01]+){0,6}).*/\1/' \
-e 's/ ([01]+)/ $((2#\1))/g' \
| xargs bash -c 'echo printf %02x "$@" ' DOLLAR0
printf %02x $((2#01111000)) $((2#01111001)) $((2#01111010)) $((2#00001010))
[STEP 109] # printf %02x $((2#01111000)) $((2#01111001)) $((2#01111010)) $((2#00001010))
78797a0a
[STEP 110] # echo xyz | xxd -b | sed -E -e 's/.*:(( [01]+){0,6}).*/\1/' \
-e 's/ ([01]+)/ $((2#\1))/g' \
| xargs bash -c 'eval printf %02x "$@" ' DOLLAR0
78797a0a
[STEP 111] # echo xyz | xxd -b | sed -E -e 's/.*:(( [01]+){0,6}).*/\1/' \
-e 's/ ([01]+)/ $((2#\1))/g' \
| xargs bash -c 'eval printf %02x "$@" ' DOLLAR0 | xxd -p -r
xyz
[STEP 112] #
在
STEP 108
我用过
echo
而不是
eval
所以你可以看到
xargs
真的产生了。