1

私は Bash スクリプトを初めて使用するので、何か助けが必要です。

ファイルbbb.txtには、次のように多数のIPv4 および IPv6 アドレスが含まれています。

10.0.2.15    fe80...
192.168.1.1   fe80...

ファイルaaa.txtには多くのiptables コマンドが含まれています。

スクリプトで のすべての IPv4 アドレスを検索しaaa.txt、それらが で見つかるかどうかを確認しbbb.txtます。一致した場合は、aaa.txt の IPv4 が bbb.txt の IPv6 に置き換えられます。それは実行可能ですか?

4

2 に答える 2

1

これに使用する方が良いと思いますperl

#!/usr/bin/perl

use strict;
use warnings;

my $file1 = 'aaa.txt';
my $file2 = 'bbb.txt';

open my $if1,'<',$file1 or die "$file1: $!\n";
open my $if2,'<',$file2 or die "$file2: $!\n";

my %ip_dictionary;
while(<$if2>){
    my ($ipv4,$ipv6)=split;
    $ip_dictionary{$ipv4}=$ipv6;
}
close $if2;

my $slurp = do { local $/; <$if1>};
close $if1;

$slurp=~ s!((?:[0-9]{1,3}\.){3}[0-9]{1,3})!exists $ip_dictionary{$1} and is_valid_ip($1) ? $ip_dictionary{$1} : $1!eg;

open my $of,'>',$file1;
print $of $slurp;

sub is_valid_ip{
    my $ip=shift//return 0;
    for(split /\./,$ip){
        return 0 if $_ > 255;
    }
    1
}
于 2013-09-08T20:53:12.857 に答える