Это не так просто, как может показаться.
stuff
, чтобы можно было использовать адрес stuff.foo.com
. Вы должны зарегистрировать его на своем DNS-сервере -, создав для него запись DNS. Иначе люди не смогут его найти. vps.foo.com/stuff.html
на stuff.foo.com
, либо вы можете переместить ресурсы прямо на stuff.foo.com
. Но тогда вы не сможете связаться с ними по старому адресу. Предполагая, что уровень патча всегда будет строкой из четырех цифр:
$ ver=1.2.0001
$ printf '%s\n' "$ver" | awk -F '.' '{ printf("%s.%s.%04d\n", $1, $2, $3 + 1) }'
1.2.0002
Здесь используется awk
и интерпретируется версия как три поля, разделенные точками. Он печатает первые два поля как есть, но добавляет 1 к третьему полю и форматирует результат, используя%04d
(заполненное нулем -четырехзначное десятичное число ).
Это сгенерирует 1.2.10000
, если $ver
равно 1.2.9999
.
Чтобы сохранить значение обратно в ver
, используйте ver=$( printf... | awk... )
.
Вы можете использовать perl
, довольно мощный текстовый манипулятор:
perl -pi -e 's/(^ver="\d+)\.(\d+)\.(\d+)"/"$1.$2.". sprintf("%04d", $3+1). "\""/e' input
Это вызывает perl с тремя параметрами:
-p
--авто -печать каждой строки ввода -i
--отредактируйте файл в -месте -e
--используйте следующий аргумент в качестве кода для выполнения В коде сказано выполнять поиск и замену в каждой строке ввода; часть «поиск» будет соответствовать только строкам, которые:
ver="
\d+
означает "совпадение цифр один или несколько раз").
,который должен быть экранирован для правил регулярных выражений .
Элементы #1 и #2 сгруппированы вместе в круглых скобках как текст замены $1
; элемент #4 является текстом замены $2
, а элемент #6 становится текстом замены $3. Прежде чем вернуть $3
на место, мы отправляем его через форматированный оператор печати, который добавляет единицу к значению.
Поскольку при замене нам нужно выполнить код perl, нам нужна опция e
в конце s///
. Мы также должны добавить в конце двойную кавычку -, которая требуется как элемент #7.
Вы можете сузить или ослабить это регулярное выражение различными способами; возможно, вы могли бы потребовать, чтобы соответствующая строка «ver» была единственной вещью в строке, и в этом случае вы должны добавить $
конец -из -привязки строки после двойной кавычки -в элементе #7.
Сbash
:
$ ver="1.2.0001"
$ printf -v ver '%s.%04d' "${ver%.*}" "$((${ver##*.} + 1))"
$ echo "$ver"
1.2.0002
${ver%.*}
используется для получения префикса 1.2
удаления шаблона суффикса.*
${ver##*.}
используется для получения части числа 0001
удаление самого длинного шаблона префикса*.
printf -v ver...
печатает префикс плюс .
и увеличенное число, используя арифметику bash $((... + 1))
и сохраняет результат обратно в переменную ver
.