SED:查找带图案的线条,仅更新一个

时间:2019-11-21 09:59:51

标签: awk sed

我有一个DNS区域文件,其中仅一个 NSs记录应被更新:它们中的任何一个都应成为 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 个答案:

答案 0 :(得分:1)

sed -i -e '0,/\<NS\>/s/\(\<NS.*\s\)dns1/\1dns2/' domain.com.db

范围0,/\<NS\>/限制了搜索并替换为从文件开头到NS的第一个匹配项(作为单独的单词)的行。替换仅在与\(\<NS.*\s\)dns1匹配的行上完成。