2016-08-01 41 views
0

我正在寻找一种解决方案来替换文件上的一个图案,除了其中的一行外。替换文件中除了一行外的图案

例如: 区域文件:

> cat /var/named/test.com.db 
; cPanel first:11.11.0-BETA_16994 (update_time):1468656855 Cpanel::ZoneFile::VERSION:1.3 hostname:server.test.com latest:11.56.0.13 
; Zone file for test.com 
$TTL 14400 
test.com.  86400 IN  SOA  ns1.test.com.  cpanel.test.com. (
               2016071602 ;Serial Number 
               14400 ;refresh 
               7200 ;retry 
               2419200 ;expire 
               43200 ) 

test.com.  14400 IN  A  192.168.1.100 

localhost  14400 IN  A  127.0.0.1 

test.com.  14400 IN  MX  0  test.com. 

mail 14400 IN  CNAME test.com. 
www  14400 IN  CNAME test.com. 
ftp  14400 IN  CNAME test.com. 
webdisk 14400 IN  A  192.168.1.100 
cpcalendars  14400 IN  A  192.168.1.100 
test.com. IN TXT "v=spf1 +a +mx +ip4:192.168.1.100 ~all" 

我想192.168.1.101以替代目前所有的IP地址192.168.1.100 它除 “SPF” 记录行。

这个怎么办?

回答

3
sed '/spf/! s/192\.168\.1\.100/192.168.1.101/' 

上线。当然,反斜杠可防止.匹配任何字符。如果您有任何IP地址可能出现多次的行,则可以在末尾添加g。如果您认为这是一个真正的问题,那么您可能会担心匹配9192.168.1.1001(也就是说,如果您认为IP地址可能显示为非IP地址的子字符串)。

+0

太棒了。测试和完美的作品:) 谢谢。 – Jondi

1

尝试这种不匹配/spf/执行请求的替代

sed -i -r 's/192.168.1.100$/192.168.1.101/g' /var/named/test.com.db 
+0

嗨,它的工作。 但是,你能解释一下“192.168.1.100 $”这个部分究竟在做什么吗?以及它如何排除SPF线?好奇地知道:) – Jondi

+1

@johnwilson:'$'需要匹配在行尾; IP地址不会出现在'spf'行的行尾。 'g'是多余的;在行结束处只能有一个匹配。 –

+0

谢谢:)这个解决方案也适用于我 – Jondi