2016-08-01 43 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