Замена шестнадцатеричного значения (измененным )десятичным значением в текстовом файле

Если вы знакомы с Scientific Linux, ближе всего будет CentOS. Fedora находится на несколько шагов впереди в версиях программного обеспечения, поэтому может возникнуть проблема с настройкой.

Вы можете попробовать dnf list --installedполучить список установленных пакетов. Вам нужно будет отредактировать точные версии и сохранить архитектуры, чтобы иметь возможность использовать список для установки эквивалентных пакетов позже.

Мне приходилось переустанавливать поврежденные установки Fedora. Я сохранил конфигурацию (по существу /etc), установил поверх системы (, стараясь не форматировать /home), установил сохраненный список пакетов, восстановил учетные записи и такую ​​форму сохранил /etc. По крайней мере, я так это помню, это было довольно давно. И это не связано с различными дистрибутивами.

3
04.11.2021, 07:33
3 ответа

В Bash есть арифметическое расширение $((... )), которое может работать с шестнадцатеричными значениями напрямую, поэтому

decrement_file () {
   number=$(( $(cat $1) - 1 ))
   echo $number > $1
}

даст вам функцию, которая может работать с вашим файлом:

decrement_file test.txt

Конечно, вы также можете вручную выполнить эти два шага в командной строке.но было похоже на то, что имело смысл добавить функцию. Добавьте это определение функции в свой ~/.bashrc, и вы сможете вызывать ее в любое время.

Небольшая проблема. :Ваши числа слишком велики, чтобы арифметика bash могла с ними работать напрямую. Итак, вам нужно полагаться на внешние инструменты (или написать библиотеку bigint в сценарии оболочки... эээ, нет ). Ответ Philippos зависит от bc, я скажу, что в любом случае вероятность того, что он будет установлен на вашем компьютере, с меньшей вероятностью, чем у python, поэтому я, вероятно, вместо этого просто напишу скрипт python:

#!/usr/bin/env python3
import sys
value = -1
with open(sys.argv[1], "r", encoding="ascii") as file:
  value += int(file.read())
with open(sys.argv[1], "w", encoding="ascii") as file:
  file.write(str(value))

и сохраните его как «файл декремента _» где-нибудь в вашем пути, chmod a+x decrement_file, чтобы сделать его исполняемым, а затем используйте его decrement_file test.txt.

Действительно минимальным, единственным -решением всего этого было бы

VAL=$(python3 -c "print( int($(cat test.txt)) - 1)"); echo $VAL > test.txt
3
04.11.2021, 10:31

Одной командой в bash со строкой здесь и калькулятором (с постфиксной записью):

dc -e '16iAo?1-p' <<<$(<file) >file

16i-ввод системы счисления
Ao-вывод системы счисления
?-читает строку
1--вычесть единицу
p-отпечатки

Внимание :В вашем примере не указано. dcКалькулятор принимает шестнадцатеричные цифры [ABCDEF] в верхнем регистре.

4
04.11.2021, 11:19

ГНУawk

gawk -M '{print strtonum($0)-1}' file

-M(или--bignum)для арифметики произвольной точности. strtonum($0)принимает числовое значение записи, обрабатывая строку как шестнадцатеричное число, поскольку она начинается с 0x. Используйте -i inplaceдля редактирования входного файла в -.

6
04.11.2021, 12:12

Теги

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