2015-12-27 102 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