2016-08-01 10 views
0

ファイル内の1行を除いた1つのパターンを置き換えるソリューションを探しています。例えばファイル内の1行以外のパターンを置き換えます。

: ゾーンファイル:

私は "SPF" レコード行を除いて 192.168.1.101でそれにすべての現在のIPアドレス に192.168.1.100を交換したい
> 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" 

これはどのように行うことができますか。

答えて

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'は冗長です。ラインの最後には1つのマッチしか存在しない。 –

+0

ありがとうございました:)この解決策も私のために働きます – Jondi

関連する問題