2015-12-27 57 views
0

我正在尝试使用sed替换特定记录的区域文件中的IP。使用下面的例子,我想替换server1的IP地址。我在替换IP而不是整条线时遇到了问题。任何人都可以提供帮助,因为我现在正处于sed的全面亏损状态。如何使用sed替换区域文件中的IP

$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 
+0

我已经尝试了很多东西,但大多是在复杂的事情。实际上我没有理由不能替换这条线。 – Tony

回答

2

您可以使用

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

如果你是细跟的变化,你可以通过-i到位更改文件中

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

顺便说一句,如果线路末端可能有空间,我会建议这样做:

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