Похоже, вы хотите преобразовать вывод 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
.