Вы можете настроить простой локальный кэширующий DNS-сервер с помощью dnsmasq и добавить в файл конфигурации одну или несколько строк
ignore-address=
Игнорировать отвечает на запросы A-записи, которые включают указанный адрес. Ошибка не возникает, dnsmasq просто продолжает ожидать другого ответа.
Вы можете заменить немного больше, чтобы избежать этой проблемы:
sed -i sX/masterX/kokomasterX file
Это заменяет «/master», поэтому при следующем запуске ничего не будет заменено, так как «/kokomaster» не совпадает.
sed -i '/kokomaster/!s/master/koko&/' file
Сначала проверьте, существует ли строка kokomaster
в строке, и если нет, выполните подстановку. Это почти дословный перевод фразы «но мы хотим добавить слово koko
только в том случае, если koko
не существует перед словом master
» в sed
.
&
в замещающей части замены будет заменен текстом, совпадающим с частью шаблона (, т.е.master
).
Прочитав комментарии (см. ниже ), вы можете захотеть использовать что-то более конкретное, что на самом деле будет изменять только часть имени сервера в URI, а не какую-либо строку master
в другом месте, даже если kokomaster
произошло (или нет )в пути URI:
sed -i 's,^\(discovery\.uri=http://\)\(master\),\1koko\2,' file
Возможно, вам даже захочется сопоставить точную и полную строку, которую вы хотите заменить, просто чтобы избежать даже гипотетических ошибок:
sed -i 's,^\(discovery\.uri=http://\)\(master\.navada\.com:8800\)$,\1koko\2,' file
Если файл конфигурации написан в формате JSON или каком-либо другом широко известном формате, вы должны не использовать sed
вообще , а jq
или какой-либо другой подходящий инструмент, специально написанный для обработки файлов этого формата. формат.
Если вы открыты для других инструментов:
perl -i -pe 's/(?<!koko)master/kokomaster/' file
(?>!foo)
является отрицательным просмотром назад , поэтому (?<!koko)master
будет соответствовать master
только в том случае, если ему не предшествует koko
.
Я использовал приведенную ниже команду awk, чтобы сделать то же самое
команда
awk '$0 !~/kokomaster/{gsub("master","kokomaster",$0)}1' filename >file_tmp && mv file_tmp filename
выход
discovery.uri=http://kokomaster.navada.com:8800
discovery.uri=http://kokomaster.navada.com:8800
Используйте
sed 's/\(koko\)*master/kokomaster/'
, поэтому master
и любое количество предыдущих koko
заменяются.