Mam listę ponad 200 plików rozszerzeń powiązań z dokładnymi informacjami o subdomenach.
Przykładowy schemat wygląda następująco.
# /named_ext/db.mysite.com
subdomain A 200.201.202.203
Muszę zastąpić całą linię zestawem trzech różnych linii, podoba mi się to.
subdomain A 200.201.202.204
subdomain A 200.201.202.205
subdomain A 200.201.202.206
Masz pomysł, jak wykonać takie zastąpienie we wszystkich /named_ext/
plikach?
bash
unix
shell-script
Jaskółka oknówka
źródło
źródło
* A 200.201.202.203
- innymi słowy, jakąkolwiek nazwą subdomeny, ale konkretnym adresem A i IP, czy też subdomena jest taka sama w każdym pliku?Odpowiedzi:
Możesz użyć następującego skryptu perla,
exchange_ips.pl
aby wymienić ip przez trzy stałe ips (funkcjaexchange_const()
) lub przez trzy przyrostowe ips (funkcjaexchange_incr()
). Po prostu dodaj komentarz (#
) przed wywołaniem funkcji na końcu skryptu, którego nie potrzebujesz.Pamiętaj, że co najmniej jeden przyrostowy IPS będzie niepoprawny, jeśli oryginalny adres IP kończy się na
253
lub wyższy.Skrypt modyfikuje wszystkie linie zaczynające się od
$domainname
. Jeśli nazwa domeny nie ma znaczenia lub jeśli pliki zawierają tylko wiersze tylko dla jednej / tej samej domeny, ustawmy $domainname = ".+";
.Wywołaj skrypt w następujący sposób:
Pętla nad wszystkimi plikami (z kopią zapasową):
Przykład:
Przykładowy plik do modyfikacji:
Wyjście
exchange_const()
:Wyjście
exchange_incr()
:źródło
rename s/$/.bak/ $f;
namv $f $f.bak;
w pętli, jeślirename
nie działa. Ponadto edytowałem odpowiedź / skrypt, aby filtrować duplikaty, po prostu zapamiętując znalezioną linię i ignorując kolejne dopasowania.Mały skrypt bashowy
Możesz to zrobić za pomocą prostego
sed
polecenia nad każdym plikiem:Wyjaśnienie
Pętla for wylicza
./named_ext/*
i uruchamiased
linię za pomocą pliku$f
.-r
Przedłuży regularne expressian i-i
będzie edytować plik na swoim miejscu.Wyrażenie regularne zastępuje
z dowolną liczbą spacji wg
Jeśli chcesz zachować odstępy, możesz dodać spacje w
sed
linii.źródło
sed
! ;)źródło