Вы можете использовать следующий скрипт perl exchange_ips.pl
для обмена ip либо тремя постоянными ips (функция exchange_const()
), либо тремя инкрементными ips (функция exchange_incr()
). Просто добавьте комментарий (#
) перед вызовом функции в конце скрипта, который вам не нужен.
Обратите внимание, что один или несколько инкрементальных ips будут неправильными, если исходный ip заканчивается 253
или выше.
Скрипт изменяет все строки, начиная с $domainname
. Если доменное имя не имеет значения, или если ваши файлы содержат строки только для одного / того же домена, установите my $domainname = ".+";
,
#!/usr/bin/perl
use strict;
use warnings;
my @data = <STDIN>;
my $domainname = "subdomain";
my $const_ip1 = "123.123.123.123";
my $const_ip2 = "124.124.124.124";
my $const_ip3 = "125.125.125.125";
my $pattern = qr/^($domainname\s+A\s+)([\d\.]+)/is;
sub exchange_const($) {
my $dataref = shift;
my $found = 0;
foreach (@$dataref) {
if ($_ =~ m/$pattern/) {
unless ($found) {
$found = 1;
printf "%s%s\n%s%s\n%s%s\n", $1, $const_ip1, $1, $const_ip2, $1, $const_ip3;
}
} else {
print $_;
}
}
}
sub exchange_incr($) {
my $dataref = shift;
my $found = 0;
foreach (@$dataref) {
if ($_ =~ m/$pattern/) {
unless ($found) {
$found = 1;
my $const = $1;
my @iparr = split /\./, $2;
for (1 .. 3) {
$iparr[3]++;
printf "%s%s\n", $const, join ".", @iparr;
}
}
} else {
print $_;
}
}
}
# exchange ip with constant ips
exchange_const(\@data);
# exchange ip with incremental ips
exchange_incr(\@data);
Назовите сценарий так:
perl exchange_ips.pl < your_file
Цикл по всем файлам (с резервной копией):
for f in /named_ext/*; do rename s/$/.bak/ $f; perl exchange_ips.pl < $f.bak > $f; done
Пример:
Пример файла для модификации:
# some foo
subdomain A 200.201.202.203
# duplicate
subdomain A 200.201.202.203
# some bar
otherdomain A 99.99.99.99
otherdomain A 1.1.1.1
# another duplicate
subdomain A 200.201.202.203
Вывод exchange_const()
:
# some foo
subdomain A 123.123.123.123
subdomain A 124.124.124.124
subdomain A 125.125.125.125
# duplicate
# some bar
otherdomain A 99.99.99.99
otherdomain A 1.1.1.1
# another duplicate
Вывод exchange_incr()
:
# some foo
subdomain A 200.201.202.204
subdomain A 200.201.202.205
subdomain A 200.201.202.206
# duplicate
# some bar
otherdomain A 99.99.99.99
otherdomain A 1.1.1.1
# another duplicate