Sed добавив текст замены дважды - PullRequest
0 голосов
/ 13 октября 2019

Я никогда не видел, чтобы sed вел себя так, но я пытаюсь заменить все экземпляры "nameserver" в /etc/resolv.conf моими собственными 3 записями, включая "nameserver". Каждое комбо, которое я пробовал, добавляет мои 3 записи дважды, поэтому у меня есть 6 записей.

sed -i 's/.*nameserver.*/nameserver 10.1.1.1\nnameserver 10.1.1.2\nnameserver 10.1.1.3/g' /etc/resolv.conf

, который выводит

nameserver 10.1.1.1
nameserver 10.1.1.2
nameserver 10.1.1.3
nameserver 10.1.1.1
nameserver 10.1.1.2
nameserver 10.1.1.3

Итак, правильный порядок изаписи, но добавив его дважды. Я также попытался сузить его до сервера имен и ip, но все равно вывести один и тот же вывод дважды.

sed -i "s/^nameserver [0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/nameserver 10.1.1.1\nnameserver 10.1.1.2\nnameserver 10.1.1.3/g"

Я действительно запутался и не могу пройти мимоэто. Любая помощь приветствуется.

ETA: текущий resolv.conf

search domain1.net. domain2.net. domaine.com.
nameserver 192.168.1.1
nameserver 192.168.1.2

желаемый вывод

search domain1.net. domain2.net. domaine.com.
nameserver 10.1.1.1
nameserver 10.1.1.2
nameserver 10.1.1.3

1 Ответ

1 голос
/ 13 октября 2019

У вас есть два вхождения "nameserver" в оригинале, поэтому sed заменяет каждое из них.

Вы можете сделать многострочных замен на sed, но прощеудалите ненужные строки, затем добавьте те, которые вы делаете. Хотя я не знаком с /etc/resolv.conf, поэтому не знаю, имеет ли значение порядок.

sed '/nameserver.*/d' /etc/resolv.conf
cat <<'EOF'
nameserver 10.1.1.1
nameserver 10.1.1.2
nameserver 10.1.1.3
EOF

Если результат выглядит неплохо, выполните приведенные ниже действия, чтобы действительно внести изменения:

sudo sed -i '/nameserver.*/d' /etc/resolv.conf
sudo tee -a /etc/resolv.conf >/dev/null <<'EOF'
nameserver 10.1.1.1
nameserver 10.1.1.2
nameserver 10.1.1.3
EOF
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...