URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 88280
[ Назад ]

Исходное сообщение
"Замена серийника в файлах зон"

Отправлено Владимир , 01-Мрт-10 11:41 
Есть куча файлов с DNS-зонами. Необходимо во всех файлах поменять серийник.
Строки с ним выглядят как:

2007111301 ; serial

Разумеется, сам серийник во всех зонах разный. Поменять нужно на одинаковый для всех.
Каким образом это осуществить автоматически используя sed ?
Иными словами: как, используя sed, поменять 10 заранее неизвестных цифр на другие, заранее известные 10 цифр?
А еще проще: какое регулярное выражение нужно вписать в первую часть "s/ /2010030101/" ?

Или sed - это не то средство для решения задачи?


Содержание

Сообщения в этом обсуждении
"Замена серийника в файлах зон"
Отправлено Michael , 01-Мрт-10 11:54 
>[оверквотинг удален]
>
>Разумеется, сам серийник во всех зонах разный. Поменять нужно на одинаковый для
>всех.
>Каким образом это осуществить автоматически используя sed ?
>Иными словами: как, используя sed, поменять 10 заранее неизвестных цифр на другие,
>заранее известные 10 цифр?
>А еще проще: какое регулярное выражение нужно вписать в первую часть "s/
>/2010030101/" ?
>
>Или sed - это не то средство для решения задачи?

имхо, лучше распарсить конфиг, найти серийник и заменить.
регуляркой рискутете потереть что-то лишнее


"Замена серийника в файлах зон"
Отправлено Владимир , 01-Мрт-10 12:00 
>имхо, лучше распарсить конфиг, найти серийник и заменить.
>регуляркой рискутете потереть что-то лишнее

Серийник - это единственное место в имеющихся файлах, где 10 подряд цифр.
Вероятно, при правильно составленном рег. выражении ничего более потереться недолжно.

Но если иных ответов не будет - будем идти предложенным путем.


"Замена серийника в файлах зон"
Отправлено Vitalka , 01-Мрт-10 12:54 
>Но если иных ответов не будет - будем идти предложенным путем.

Я думаю что вам sed'а хватит. В свое время решал задачу замены IP-шников в куче файлов зон такой командой:

sed -i "{ s/192\.168\.0\.1/192\.168\.2\.1/ };" /etc/bind/*.db

В вашем случае используйте что-то вроде:

sed -i "{ s/[0123456789]\{10\}/2010030101/ };" /etc/bind/*.db

Сами понимаете, что резервная копия перед применением команды не помешает :)


"Замена серийника в файлах зон"
Отправлено Владимир , 01-Мрт-10 13:07 
>sed -i "{ s/[0123456789]\{10\}/2010030101/ };" /etc/bind/*.db

Гранд мерси.
До такого я не додумался.
Интересно, а почему не срабатывает \d{10} ?


"Замена серийника в файлах зон"
Отправлено Vitalka , 01-Мрт-10 13:22 
>Гранд мерси.

Я бы даже сказал короче:

sed -i "{ s/[0-9]\{10\}/2010030101/ };" /etc/bind/*.db

>Интересно, а почему не срабатывает \d{10} ?

Наверное потому что \d не описано в стандарте POSIX, а является часть Perl-compatible regular expressions (PCRE). Зато в POSIX есть другая альтернатива:

sed -i "{ s/[[:digit:]]\{10\}/2010030101/ };" /etc/bind/*.db