После просмотра документации в Интернете о том, что такое hash
, и поскольку у меня не было хэша для моего Debian-DVD
, я загрузил свежий Debian-9.1-DVD.iso
и проверил его хэш, выполнив sha512sum debian-9-dvd.iso
и сравнив это к хэшу, заданному debian.org
.
Поскольку они совпали, я начал устанавливать эту копию Debian, и она отлично работает.
Почему бы не хранить все в оболочке (bash )?
$ dhcp6_s46_cont_mapt='0:5b:0:9:40:0:64:ff:9b:0:1:0:3:0:59:0:17:0:a:20:47:55:54:4c:36:26:0:6c:e1:80:e0:0:0:5d:0:4:1:0:0:0:'
$ IFS=: read -a arr <<<"$dhcp6_s46_cont_mapt"
$ printf -v updatedstring '%02x' "${arr[@]/#/0x}"
$ echo "$updatedstring"
005b0009400064ff9b0001000300590017000a204755544c3626006ce180e000005d000401000000
используя sed
и символ -класс [[:xdigit:]]
только для шестнадцатеричных цифр, вы можете сделать:
sed -E ':a s/(^|:)([[:xdigit:]])(:|$)/\10\2\3/; ta; s/://g'
[[:xdigit:]]
совпадает с (0 -9a -f; без учета регистра)Должно работать в busybox:
djunk=0:5b:0:9:40:0:64:ff:9b:0:1:0:3:0:59:0:17:0:a:20:47:55:54:4c:36:26:0:6c:e1:80:e0:0:0:5d:0:4:1:0:0:0:
djunk=$(djunk=:${djunk%:}; printf %02x ${djunk//:/ 0x})
echo "$djunk"
005b0009400064ff9b0001000300590017000a204755544c3626006ce180e000005d000401000000
Предполагая значение по умолчанию IFS
, может быть легко исправлено (уточнение оставлено читателю в качестве упражнения)
С синтаксисом POSIX sh
:
updatedstring=$(IFS=:; printf %02x $(printf 0x%s: $dhcp6_s46_cont_mapt))
Возможно, необычное применениеdd
:
updatestring=$(
printf %s "$dhcp6_s46_cont_mapt" |
tr : '\n' |
dd cbs=2 conv=block 2> /dev/null |
tr ' ' 0
)
Использование любого awk в любой оболочке на каждом компьютере UNIX:
$ var='0:5b:0:9:40:a:b:64'
$ echo "$var" | awk 'BEGIN{FS=OFS=":"} {for (i=1;i<=NF;i++) $i=substr("0"$i,length($i))} 1'
00:5b:00:09:40:0a:0b:64
В противном случае использование sed с -E
для включения ERE:
$ var='0:5b:0:9:40:a:b:64'
$ echo "$var" | sed -E 's/(^|:)([^:])(:|$)/\10\2\3/g; s/(^|:)([^:])(:|$)/\10\2\3/g; s/://g'
005b0009400a0b64
вот что происходит пошагово в скрипте sed:
$ echo "$var" | sed -E 's/(^|:)([^:])(:|$)/\10\2\3/g'
00:5b:00:9:40:0a:b:64
$ echo "$var" | sed -E 's/(^|:)([^:])(:|$)/\10\2\3/g; s/(^|:)([^:])(:|$)/\10\2\3/g'
00:5b:00:09:40:0a:0b:64
$ echo "$var" | sed -E 's/(^|:)([^:])(:|$)/\10\2\3/g; s/(^|:)([^:])(:|$)/\10\2\3/g; s/://g'
005b0009400a0b64