Есть куча файлов с DNS-зонами. Необходимо во всех файлах поменять серийник.
Строки с ним выглядят как:2007111301 ; serial
Разумеется, сам серийник во всех зонах разный. Поменять нужно на одинаковый для всех.
Каким образом это осуществить автоматически используя sed ?
Иными словами: как, используя sed, поменять 10 заранее неизвестных цифр на другие, заранее известные 10 цифр?
А еще проще: какое регулярное выражение нужно вписать в первую часть "s/ /2010030101/" ?Или sed - это не то средство для решения задачи?
>[оверквотинг удален]
>
>Разумеется, сам серийник во всех зонах разный. Поменять нужно на одинаковый для
>всех.
>Каким образом это осуществить автоматически используя sed ?
>Иными словами: как, используя sed, поменять 10 заранее неизвестных цифр на другие,
>заранее известные 10 цифр?
>А еще проще: какое регулярное выражение нужно вписать в первую часть "s/
>/2010030101/" ?
>
>Или sed - это не то средство для решения задачи?имхо, лучше распарсить конфиг, найти серийник и заменить.
регуляркой рискутете потереть что-то лишнее
>имхо, лучше распарсить конфиг, найти серийник и заменить.
>регуляркой рискутете потереть что-то лишнееСерийник - это единственное место в имеющихся файлах, где 10 подряд цифр.
Вероятно, при правильно составленном рег. выражении ничего более потереться недолжно.Но если иных ответов не будет - будем идти предложенным путем.
>Но если иных ответов не будет - будем идти предложенным путем.Я думаю что вам 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
Сами понимаете, что резервная копия перед применением команды не помешает :)
>sed -i "{ s/[0123456789]\{10\}/2010030101/ };" /etc/bind/*.dbГранд мерси.
До такого я не додумался.
Интересно, а почему не срабатывает \d{10} ?
>Гранд мерси.Я бы даже сказал короче:
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