Если у вас есть новый список серверов в файле с именем list.txt
в cwd
:
sed '/^server/{x;//!r list.txt
d}' /etc/ntp.conf
или, если вы не хотите использовать файл, а скорее жестко закодируете новые имена серверов:
sed '/^server/{x;//!c\
server 1\
........\
server n-1\
server n
d}' /etc/ntp.conf
Предполагается, что существует по крайней мере одна не комментируемая строка сервера
в вашем /etc/ntp.conf
(также он не удалит какие-либо закомментированные строки server
- вы можете изменить регулярное выражение, чтобы включить их тоже). Если вы хотите вставить эти строки, даже если в исходном файле не было записей о сервере (и в этом случае добавьте новые серверы в конец файла), вы можете сделать что-то вроде:
sed '/^server/{x;//!r list.txt
d}
${x;//!r list.txt
x}' /etc/ntp.conf
или использовать те же условия, если вы предпочитаете using c \
- я оставлю это как упражнение. Имейте в виду, что при изменении строк с помощью c \
все обратные косые черты и встроенные символы новой строки должны быть экранированы обратной косой чертой (как в моем примере).
sed '
/^server/ d
/first block/a\
server 5.5.5.5\
server 6.6.6.6\
server 7.7.7.7
' /etc/ntp.conf
изменить только первое вхождение:
# first block occurrences
server 5.5.5.5
server 6.6.6.6
server 7.7.7.7
driftfile /var/lib/ntp/drift
# second block of occurrences