如何用sed替换区域文件中的IP

How to replace IP in zone file with sed

我正在尝试使用 sed 替换区域文件中特定记录的 IP。使用下面的示例,我想替换 server1 的 IP。我在更换 IP 而不是整条线路时遇到问题。任何人都可以帮忙,因为我现在对 sed 完全不知所措。

$ORIGIN example.com
$TTL 86400
@     IN     SOA    dns1.example.com.     hostmaster.example.com. (
                    2001062501 ; serial
                    21600      ; refresh after 6 hours
                    3600       ; retry after 1 hour
                    604800     ; expire after 1 week
                    86400 )    ; minimum TTL of 1 day

      IN     NS     dns1.example.com.
      IN     NS     dns2.example.com.

      IN     MX     10     mail.example.com.
      IN     MX     20     mail2.example.com.

             IN     A       10.0.1.5

server1      IN     A       10.0.1.5
server2      IN     A       10.0.1.7
dns1         IN     A       10.0.1.2
dns2         IN     A       10.0.1.3

您可以使用

IP="1.2.3.4"
sed "/^server1/s/[^[:space:]]\+$/$IP/" file

如果您对更改没问题,可以通过 -i 来更改 中的文件 :

IP="1.2.3.4"
sed -i "/^server1/s/[^[:space:]]\+$/$IP/" file

顺便说一句,如果行尾可能出现 space,我建议这样做:

sed "/^server1/s/[^[:space:]]\+[[:space:]]\{0,\}$/$IP/" file
sed -r "s/^(server1.*)([0-9]+[.][0-9]+[.][0-9]+.[0-9]+[ ]*)$/$NEWIP/" my_file