2016-08-01 6 views
0

Ich suche nach einer Lösung, um ein Muster in einer Datei außer einer Zeile zu ersetzen.Ersetze Muster in der Datei mit Ausnahme einer Zeile darin

Zum Beispiel: Zonendatei:

> 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" 

ich alle aktuellen IP-Adresse 192.168.1.100 darin mit 192.168.1.101 mit Ausnahme der "spf" Rekordlinie ersetzt werden soll.

Wie kann dies getan werden ?.

Antwort

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

auf Linien, die /spf/ nicht die gewünschten Substitution übereinstimmen. Die umgekehrten Schrägstriche verhindern natürlich, dass die . einem beliebigen Zeichen entspricht. Wenn Sie Zeilen haben, in denen die IP-Adresse mehrfach vorkommen könnte, können Sie am Ende eine g hinzufügen. Wenn Sie denken, dass es ein echtes Problem ist, können Sie sich sorgen 9192.168.1.1001 (dh Sie, wenn Sie denken, die IP-Adresse könnte als Teilzeichenfolge von etwas, das keine IP-Adresse ist).

+0

Super. Getestet und funktioniert perfekt :) Danke. – Jondi

1

testen

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

Hallo, es hat funktioniert. Aber könnten Sie erklären, was der Teil "192.168.1.100 $" eigentlich macht? und wie es SPF Linie ausschließt ?. Neugierig zu wissen :) – Jondi

+1

@johnwilson: Das '$' erfordert die Übereinstimmung am Ende der Zeile; Die IP-Adresse erscheint nicht am Ende der Zeile in der 'spf'-Zeile. Das "g" ist redundant; es kann immer nur ein Spiel am Ende der Reihe geben. –

+0

Danke :) Diese Lösung funktioniert auch für mich – Jondi

Verwandte Themen