САС: Найти узорные линии и обновить только одну - PullRequest
0 голосов
/ 21 ноября 2019

У меня есть файл зоны DNS, где должна быть обновлена ​​только одна из записи NS: любая из них должна стать dns2.hosting.com .

domain.com.     1800000 IN      SOA     dns1.hosting.com.      cpanel.one.domain2.com.      (
                                            2018101101 ;Serial Number
                                            86400 ;refresh
                                            7200 ;retry
                                            3600000 ;expire
                                            86400   )

domain.com.     1800000 IN      NS      dns1.hosting.com.
domain.com.     1800000 IN      NS      dns1.hosting.com.

Я пытался использовать sed для достижения этой цели, он только обновляет обе записи. Пожалуйста, помогите.

sed -i '/NS/ s/dns1/dns2/' domain.com.db

Ожидаемый результат:

domain.com.     1800000 IN      SOA     dns1.hosting.com.      cpanel.one.domain2.com.      (
                                            2018101101 ;Serial Number
                                            86400 ;refresh
                                            7200 ;retry
                                            3600000 ;expire
                                            86400   )

domain.com.     1800000 IN      NS      dns1.hosting.com.
domain.com.     1800000 IN      NS      dns2.hosting.com.

1 Ответ

1 голос
/ 21 ноября 2019
sed -i -e '0,/\<NS\>/s/\(\<NS.*\s\)dns1/\1dns2/' domain.com.db

Диапазон 0,/\<NS\>/ ограничивает поиск и заменяет строки от начала файла до первого вхождения NS в качестве отдельного слова. Замена производится только на строки, соответствующие \(\<NS.*\s\)dns1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...