Я бы написал:
increment_date() {
local current=$(grep -oP 'PROCESS DATE =\K.+' file)
local next=$(date -d "$current + 1 day" +%F)
sed -i "/PROCESS DATE =/s/$current/$next/" file
}
cat file
increment_date
cat file
increment_date
cat file
PROCESS DATE =2012-02-28
PROCESS DATE =2012-02-29
PROCESS DATE =2012-03-01
Это предполагает, что строка PROCESS DATE встречается в файле только один раз, и она находится в строке сама по себе.
Поскольку на этом форуме не было ответа на мой вопрос, я написал в группу рассылки freebsd-net с аналогичным вопросом и получил рекомендации использовать два инструмента IMUNES http://imunes.tel.fer.hr / и TEACUP http://caia.swin.edu.au/tools/teacup/
Я тестировал IMUNES в течение нескольких дней, но я все еще не тестировал TEACUP, поэтому я предоставлю краткое описание о нем.
IMUNES позволяет создать виртуальную сеть, в которой вы можете настроить все, от интерфейсов узлов до протоколов маршрутизации в маршрутизаторах, а также параметры канала, такие как скорость, коэффициент битовых ошибок, задержки и процент дублирования пакетов. Когда эксперимент начинается, каждый виртуализированный узел имеет свою собственную файловую систему, которая создается из файлов в папке / var / imunes / vroot /
, что позволяет вам изменять настройки для всех устройств одновременно.
Есть некоторые вещи, которые поначалу не столь очевидны (по крайней мере, для меня):
/ var / imunes / [i *****]
, где создается папка для каждого виртуального узла.Вы, конечно, можете использовать команду find
, чтобы найти файл, который вы ищете; pkg_add_imunes [settings] [name]
; kldload dummynet
и используйте ipfw
для настройки параметров связи между узлами. Я обновлю список, если есть что добавить к нему.
@KarlisL Если вы пропустили это, IMUNES недавно добавил поддержку Linux http://imunes.net . Он использует Docker для узлов L3 (Quagga в маршрутизаторах) и Open vSwitch для узлов L2, поэтому в основном вы получаете «настоящие» машины Linux, связанные с «настоящими» коммутаторами. Однако есть некоторые проблемы с настройкой BER и т. Д. Через графический интерфейс, поэтому вы должны сделать это вручную внутри экземпляра узла.