Шестнадцатеричные числа в десятичные $ ((0039))

Используя функцию и GNU Parallel, вы заменяете повторяющийся раздел:

cd ~
apt-get update
apt-get install varnish -y
sed -i 's/Listen 80/Listen 8080/g' /etc/apache2/ports.conf

myfunc() {
    sed -i 's/\*\:80/\*\:8080/g' /etc/apache2/sites-available/$1 && 
      a2ensite $1
}
export -f myfunc

parallel myfunc  {/} ::: /etc/apache2/sites-available/*

mkdir -p /etc/systemd/system/varnish.service.d # Be aware! You might not need this in the future.
cat <<-'VARNISH' > /etc/systemd/system/varnish.service.d/customexec.conf
[Service]
ExecStart=
ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
VARNISH
systemctl restart apache2.service && systemctl daemon-reload && systemctl restart varnish.service
0
22.08.2017, 05:31
2 ответа

Использование GNU awk:

$ awk -F'[.][.]' '{printf "%d..%d\n", strtonum("0x"$1), strtonum("0x0"$2)}' file
48..57
8596..8601
8617..8618
8986..8987
9193..9203
9208..9210
9642..9643

-F'[.][.]'сообщает awk, что наши поля ввода разделены ... .

Формат "%d..%d\n"указывает, что в выводе должны быть десятичные числа, разделенные двумя точками.

strtonum— это функция awk для преобразования строки в число. Чтобы сообщить awk, что число шестнадцатеричное, мы помещаем перед ним 0x, как в "0x"$1или "0x"$2.

2
28.01.2020, 02:19

Предполагается, что число, начинающееся с нуля, является восьмеричным числом.
Восьмеричные числа должны иметь цифры в диапазоне от 0 -до 7 (без 8 или 9 ).

Таким образом, число 9 в 0039«слишком велико для основания»

Однако это работает, (предполагая, что 0039 является шестнадцатеричным числом):

$ echo $((0x0039))
57

Если вы хотите преобразовать число, выполните:

$ number=0039
$ printf 'octal=%o decimal=%d hexadecimal=%x\n' "$((0x$number))"{,,}
octal=71 decimal=57 hexadecimal=39
2
28.01.2020, 02:19

Теги

Похожие вопросы