Сервер DNS помог бы Вам здесь. Вы могли установить клиенты, чтобы получить IP от DHCP и использовать динамический DNS, чтобы позволить клиентам обновить сервер DNS, когда они получают новый IP.
Посмотрите следующую ссылку для примера с сервером DNS BIND
Можно использовать awk
:
awk 'NF == 1 { print LAST } { LAST=$0 }' < datafile
Это сохраняет каждую строку файла (LAST=$0
) по ходу, а когда в строке только одна запись (NF == 1
- NF
- это количество лексем на строке, грубо говоря) выводит сохраненную предыдущую строку наружу.
Если у вас только одно появление маркера, вы можете сделать это с помощью GNU grep
и головки
:
grep -x -B 1 10 file | head -n 1
-B 1
говорит grep
, чтобы вывести на печать строку соответствия и строку перед ней. При использовании опции -x
, grep 10
соответствует строке ex
actly 10
(в отличие от , содержащей 10
). Наконец, головка -n 1
печатает только первую из полученных строк.
Можно использовать sed
:
sed -e '/^10$/{x;p;}' -e 'x;d' < datafile
Пояснение:
Адрес /^10$/
совпадает со строкой, содержащей 10. Когда он совпадает, выполняется следующая серия команд, {x;p;}
, которая обменивает (x
) пространство удержания с пространством шаблона, а затем печатает (p
) пространство шаблона.
Пространство удержания содержит предыдущую строку из-за остальной части скрипта. Для каждой строки файла, обменяйте (x
) пространство удержания с пространством шаблона, а затем удалите (d
) все, что находится в пространстве шаблона.
В отличие от первой команды, которая имеет префикс адреса, который заставляет ее совпадать только тогда, когда видно 10 строк, эти команды не имеют префикса, и, таким образом, совпадают на каждой строке файла. В результате мы продолжаем помещать последнюю видимую строку в пробел, а тот факт, что мы удаляем пространство шаблона, означает, что не будет никакого вывода, кроме нашего явного вывода, когда мы видим 10.
.