Как конвертировать векторное число 5-значное число в формат дата

Очевидно, диск разделен с использованием формата GPT, необходимого, если система использовала UEFI для загрузки. Возможно, FreeBSD сначала прощупывает старомодную раскладку разбиения MS-DOS и записывает и печатает сообщение об этом, но затем продолжает пробовать другие раскладки и успешно находит раскладку GPT и продолжает загружаться.

Что касается необходимости выбора твердотельного накопителя вручную, это, вероятно, просто проблема конфигурации BIOS. Я подозреваю, что жесткий диск подключен к первому порту SATA и, следовательно, становится загрузочным диском по умолчанию. Исправьте конфигурацию BIOS или замените подключения SATA так, чтобы твердотельный накопитель был подключен к первому порту SATA.

-121--111222-

Здесь я бы использовал perl .

WORD=$word REPLACE=$replace perl -pi -e '
  s/\b\Q$ENV{WORD}\E\b/$ENV{REPLACE}/g' file

sed (даже GNU sed ) не имеет эквивалента для \Q\E , который необходим для того, чтобы слово $ не принималось в качестве regexp. И большинство реализаций sed не поддерживают -i (или поддерживают его с другим синтаксисом) или \b .

\b соответствует переходу между символом слово и не слово .

Поэтому \b\Q1.1.2.3\E\b будет соответствовать 1,1,2,3,4 как . является не словом .

Вы также можете сделать:

WORD=$word REPLACE=$replace perl -pi -e '
  s/(?

Для соответствия $ word , если он не предшествует и не сопровождается символом без интервала. (с использованием (? и (?!) отрицательных операторов обратного/прямого взгляда).

Обратите внимание, что perl по умолчанию будет работать с символами ASCII. Например, символ word будет только _ a-zA-Z0-9 (\b\Q1.2.3\E\b будет совпадать в 1,2 .3é и \S будет совпадать с отдельными байтами расширенного интервала в Юникоде). Для данных, не относящихся к ASCII, необходимо добавить параметр -CLSD в perl .

Некоторые примеры:

$ export WORD=1.1.1.3 REPLACE=REPLACE
$ printf '1.1.1.3-x 1.1.1.3\u2006 1.1.1.3.4 1.1.123 1.1.1.3\u20dd 1.1.1.3\ue9\n' > f
$ cat f
1.1.1.3-x 1.1.1.3  1.1.1.3.4 1.1.123 1.1.1.3⃝ 1.1.1.3é
$ perl -pe 's/\b\Q$ENV{WORD}\E\b/$ENV{REPLACE}/g' f
REPLACE-x REPLACE  REPLACE.4 1.1.123 REPLACE⃝ REPLACEé
$ perl -CLSD -pe 's/\b\Q$ENV{WORD}\E\b/$ENV{REPLACE}/g' f
REPLACE-x REPLACE  REPLACE.4 1.1.123 1.1.1.3⃝ 1.1.1.3é
$ perl -pe 's/(?

-121--72416-

Символ ~ сортируется как «меньше, чем ничего». Т.е. пакет -name-1.0-0 ~ 201 ~ ubuntu14.04.1 будет обновлено до пакетов -name-1.0-0 ~ 201 ; таким образом, часть '~ ubuntu14.04.1' указывает предварительное освобождение.

При сравнении двух показанных версий обе версии фактически являются версиями предварительного выпуска.

Чтобы узнать, какую версию dpkg на самом деле считает более новой:

$ dpkg --compare-versions '1.0-0~201~ubuntu14.04.1' lt '1.0+r201~daily~ubuntu14.04.1' && echo less than
less than

Так 1,0-0 ~ 201 ~ ubuntu14.04.1 считается менее 1,0 + r201 ~ daily ~ ubuntu14.04.1 .

Правила, касающиеся номеров версий, описаны в https://www.debian.org/doc/manuals/maint-guide/first.en.html#namever . Этот текст предназначен для новых сопровождающих Debian, но объясняет это и для конечных пользователей.

1
30.11.2018, 12:41
1 ответ

Предполагая, что информация в этом блоге верна, эта формула должна работать:

date_to_msidx(){ echo $(( $(TZ=UTC date -d "$1" +%s) / 86400 + 25569)); }

date_to_msidx 10/03/2018
43376
date_to_msidx 07/05/1998
35981

Это «Система дат 1900 года» Microsoft; дней с 1 января 1900 года, начиная с 1, но неправильно считая 1900 год високосным (на один день дольше, чем в действительности ).

Формула сначала использует date +%sдля преобразования во время Unix (~секунд с 01.01.1970 ), делит его на количество секунд в сутках (86400 ), затем добавляет количество дней с 01.01.1900 по 01.01.1970 (25569 ), предварительно рассчитанное с использованием вышеуказанной системы.

Предполагается дата GNU; адаптация его для других систем/языков оставлена ​​читателю в качестве упражнения.

2
27.01.2020, 23:31

Теги

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