2017-02-13 41 views
0

我有一個腳本從文件中加載數據,該文件具有IP,並且對應於該客戶端名稱。像下面一樣從一系列數字獲取數據匹配perl

XX.XX.XX.XX = ABC 
xx.yy.yyy.xk = BCD 

在一個數組中,我有一個IP列表,所以從上面的數據中我們得到了IP在數組中的客戶端名稱。

my @ips = split(/\,/, $key); 
    for my $ip (@ips) { 
    $name = $hash{Client_Map}{$ip}; 
    } 

現在我有IP的以及正常的IP的範圍在文件中的文件一樣

XX.XX.XX.0-244 = BDE 
XX.XX.XY.14-44 = TEST 
XX.XX.XX.XX = ABC 
xx.yy.yyy.xk = BCD 

,我們該如何處理代碼匹配這些IP的獲取客戶端名稱英寸用於加載我們正在使用的文件use Config::General Perl模塊。

回答

3

在閱讀Config :: General的配置哈希後,您需要遍歷它,查找範圍內的鍵並將其刪除。使用範圍中的兩個值將新密鑰插入到散列中。

Perl的range operator ..是一個方便的方法。 delete返回已刪除密鑰的值也很好。

my $client_map = { 
    '127.0.0.1'  => 'FOO', 
    'XX.XX.XX.0-244' => 'BDE', 
    'XX.XX.XY.14-44' => 'TEST', 
}; 

foreach my $ip_or_range (keys %{$client_map}) { 
    if (my ($lower, $upper) = $ip_or_range =~ m/(\d+)-(\d+)$/) { 
     my $name = delete $client_map->{$ip_or_range}; 
     $ip_or_range =~ s/[^\.]+$//; 
     $client_map->{ $ip_or_range . $_ } = $name for $lower .. $upper; 
    } 
} 

現在哈希將看起來像這樣。

\ { 
    127.0.0.1  "FOO", 
    XX.XX.XX.0  "BDE", 
    XX.XX.XX.1  "BDE", 
    XX.XX.XX.2  "BDE", 
    XX.XX.XX.3  "BDE", 
    XX.XX.XX.4  "BDE", 
    XX.XX.XX.5  "BDE", 
    XX.XX.XX.6  "BDE", 
    XX.XX.XX.7  "BDE", 
    XX.XX.XX.8  "BDE", 
    XX.XX.XX.9  "BDE", 
    XX.XX.XX.10 "BDE", 
    XX.XX.XX.11 "BDE", 
    XX.XX.XX.12 "BDE", 
    XX.XX.XX.13 "BDE", 
    XX.XX.XX.14 "BDE", 
    XX.XX.XX.15 "BDE", 
    XX.XX.XX.16 "BDE", 
    XX.XX.XX.17 "BDE", 
    XX.XX.XX.18 "BDE", 
    XX.XX.XX.19 "BDE", 
    XX.XX.XX.20 "BDE", 
    XX.XX.XX.21 "BDE", 
    XX.XX.XX.22 "BDE", 
    XX.XX.XX.23 "BDE", 
    XX.XX.XX.24 "BDE", 
    XX.XX.XX.25 "BDE", 
    XX.XX.XX.26 "BDE", 
    XX.XX.XX.27 "BDE", 
    XX.XX.XX.28 "BDE", 
    XX.XX.XX.29 "BDE", 
    XX.XX.XX.30 "BDE", 
    XX.XX.XX.31 "BDE", 
    XX.XX.XX.32 "BDE", 
    XX.XX.XX.33 "BDE", 
    XX.XX.XX.34 "BDE", 
    XX.XX.XX.35 "BDE", 
    XX.XX.XX.36 "BDE", 
    XX.XX.XX.37 "BDE", 
    XX.XX.XX.38 "BDE", 
    XX.XX.XX.39 "BDE", 
    XX.XX.XX.40 "BDE", 
    XX.XX.XX.41 "BDE", 
    XX.XX.XX.42 "BDE", 
    XX.XX.XX.43 "BDE", 
    XX.XX.XX.44 "BDE", 
    XX.XX.XX.45 "BDE", 
    XX.XX.XX.46 "BDE", 
    XX.XX.XX.47 "BDE", 
    XX.XX.XX.48 "BDE", 
    XX.XX.XX.49 "BDE", 
    XX.XX.XX.50 "BDE", 
    XX.XX.XX.51 "BDE", 
    XX.XX.XX.52 "BDE", 
    XX.XX.XX.53 "BDE", 
    XX.XX.XX.54 "BDE", 
    XX.XX.XX.55 "BDE", 
    XX.XX.XX.56 "BDE", 
    XX.XX.XX.57 "BDE", 
    XX.XX.XX.58 "BDE", 
    XX.XX.XX.59 "BDE", 
    XX.XX.XX.60 "BDE", 
    XX.XX.XX.61 "BDE", 
    XX.XX.XX.62 "BDE", 
    XX.XX.XX.63 "BDE", 
    XX.XX.XX.64 "BDE", 
    XX.XX.XX.65 "BDE", 
    XX.XX.XX.66 "BDE", 
    XX.XX.XX.67 "BDE", 
    XX.XX.XX.68 "BDE", 
    XX.XX.XX.69 "BDE", 
    XX.XX.XX.70 "BDE", 
    XX.XX.XX.71 "BDE", 
    XX.XX.XX.72 "BDE", 
    XX.XX.XX.73 "BDE", 
    XX.XX.XX.74 "BDE", 
    XX.XX.XX.75 "BDE", 
    XX.XX.XX.76 "BDE", 
    XX.XX.XX.77 "BDE", 
    XX.XX.XX.78 "BDE", 
    XX.XX.XX.79 "BDE", 
    XX.XX.XX.80 "BDE", 
    XX.XX.XX.81 "BDE", 
    XX.XX.XX.82 "BDE", 
    XX.XX.XX.83 "BDE", 
    XX.XX.XX.84 "BDE", 
    XX.XX.XX.85 "BDE", 
    XX.XX.XX.86 "BDE", 
    XX.XX.XX.87 "BDE", 
    XX.XX.XX.88 "BDE", 
    XX.XX.XX.89 "BDE", 
    XX.XX.XX.90 "BDE", 
    XX.XX.XX.91 "BDE", 
    XX.XX.XX.92 "BDE", 
    XX.XX.XX.93 "BDE", 
    XX.XX.XX.94 "BDE", 
    XX.XX.XX.95 "BDE", 
    XX.XX.XX.96 "BDE", 
    XX.XX.XX.97 "BDE", 
    XX.XX.XX.98 "BDE", 
    XX.XX.XX.99 "BDE", 
    XX.XX.XX.100 "BDE", 
    XX.XX.XX.101 "BDE", 
    XX.XX.XX.102 "BDE", 
    XX.XX.XX.103 "BDE", 
    XX.XX.XX.104 "BDE", 
    XX.XX.XX.105 "BDE", 
    XX.XX.XX.106 "BDE", 
    XX.XX.XX.107 "BDE", 
    XX.XX.XX.108 "BDE", 
    XX.XX.XX.109 "BDE", 
    XX.XX.XX.110 "BDE", 
    XX.XX.XX.111 "BDE", 
    XX.XX.XX.112 "BDE", 
    XX.XX.XX.113 "BDE", 
    XX.XX.XX.114 "BDE", 
    XX.XX.XX.115 "BDE", 
    XX.XX.XX.116 "BDE", 
    XX.XX.XX.117 "BDE", 
    XX.XX.XX.118 "BDE", 
    XX.XX.XX.119 "BDE", 
    XX.XX.XX.120 "BDE", 
    XX.XX.XX.121 "BDE", 
    XX.XX.XX.122 "BDE", 
    XX.XX.XX.123 "BDE", 
    XX.XX.XX.124 "BDE", 
    XX.XX.XX.125 "BDE", 
    XX.XX.XX.126 "BDE", 
    XX.XX.XX.127 "BDE", 
    XX.XX.XX.128 "BDE", 
    XX.XX.XX.129 "BDE", 
    XX.XX.XX.130 "BDE", 
    XX.XX.XX.131 "BDE", 
    XX.XX.XX.132 "BDE", 
    XX.XX.XX.133 "BDE", 
    XX.XX.XX.134 "BDE", 
    XX.XX.XX.135 "BDE", 
    XX.XX.XX.136 "BDE", 
    XX.XX.XX.137 "BDE", 
    XX.XX.XX.138 "BDE", 
    XX.XX.XX.139 "BDE", 
    XX.XX.XX.140 "BDE", 
    XX.XX.XX.141 "BDE", 
    XX.XX.XX.142 "BDE", 
    XX.XX.XX.143 "BDE", 
    XX.XX.XX.144 "BDE", 
    XX.XX.XX.145 "BDE", 
    XX.XX.XX.146 "BDE", 
    XX.XX.XX.147 "BDE", 
    XX.XX.XX.148 "BDE", 
    XX.XX.XX.149 "BDE", 
    XX.XX.XX.150 "BDE", 
    XX.XX.XX.151 "BDE", 
    XX.XX.XX.152 "BDE", 
    XX.XX.XX.153 "BDE", 
    XX.XX.XX.154 "BDE", 
    XX.XX.XX.155 "BDE", 
    XX.XX.XX.156 "BDE", 
    XX.XX.XX.157 "BDE", 
    XX.XX.XX.158 "BDE", 
    XX.XX.XX.159 "BDE", 
    XX.XX.XX.160 "BDE", 
    XX.XX.XX.161 "BDE", 
    XX.XX.XX.162 "BDE", 
    XX.XX.XX.163 "BDE", 
    XX.XX.XX.164 "BDE", 
    XX.XX.XX.165 "BDE", 
    XX.XX.XX.166 "BDE", 
    XX.XX.XX.167 "BDE", 
    XX.XX.XX.168 "BDE", 
    XX.XX.XX.169 "BDE", 
    XX.XX.XX.170 "BDE", 
    XX.XX.XX.171 "BDE", 
    XX.XX.XX.172 "BDE", 
    XX.XX.XX.173 "BDE", 
    XX.XX.XX.174 "BDE", 
    XX.XX.XX.175 "BDE", 
    XX.XX.XX.176 "BDE", 
    XX.XX.XX.177 "BDE", 
    XX.XX.XX.178 "BDE", 
    XX.XX.XX.179 "BDE", 
    XX.XX.XX.180 "BDE", 
    XX.XX.XX.181 "BDE", 
    XX.XX.XX.182 "BDE", 
    XX.XX.XX.183 "BDE", 
    XX.XX.XX.184 "BDE", 
    XX.XX.XX.185 "BDE", 
    XX.XX.XX.186 "BDE", 
    XX.XX.XX.187 "BDE", 
    XX.XX.XX.188 "BDE", 
    XX.XX.XX.189 "BDE", 
    XX.XX.XX.190 "BDE", 
    XX.XX.XX.191 "BDE", 
    XX.XX.XX.192 "BDE", 
    XX.XX.XX.193 "BDE", 
    XX.XX.XX.194 "BDE", 
    XX.XX.XX.195 "BDE", 
    XX.XX.XX.196 "BDE", 
    XX.XX.XX.197 "BDE", 
    XX.XX.XX.198 "BDE", 
    XX.XX.XX.199 "BDE", 
    XX.XX.XX.200 "BDE", 
    XX.XX.XX.201 "BDE", 
    XX.XX.XX.202 "BDE", 
    XX.XX.XX.203 "BDE", 
    XX.XX.XX.204 "BDE", 
    XX.XX.XX.205 "BDE", 
    XX.XX.XX.206 "BDE", 
    XX.XX.XX.207 "BDE", 
    XX.XX.XX.208 "BDE", 
    XX.XX.XX.209 "BDE", 
    XX.XX.XX.210 "BDE", 
    XX.XX.XX.211 "BDE", 
    XX.XX.XX.212 "BDE", 
    XX.XX.XX.213 "BDE", 
    XX.XX.XX.214 "BDE", 
    XX.XX.XX.215 "BDE", 
    XX.XX.XX.216 "BDE", 
    XX.XX.XX.217 "BDE", 
    XX.XX.XX.218 "BDE", 
    XX.XX.XX.219 "BDE", 
    XX.XX.XX.220 "BDE", 
    XX.XX.XX.221 "BDE", 
    XX.XX.XX.222 "BDE", 
    XX.XX.XX.223 "BDE", 
    XX.XX.XX.224 "BDE", 
    XX.XX.XX.225 "BDE", 
    XX.XX.XX.226 "BDE", 
    XX.XX.XX.227 "BDE", 
    XX.XX.XX.228 "BDE", 
    XX.XX.XX.229 "BDE", 
    XX.XX.XX.230 "BDE", 
    XX.XX.XX.231 "BDE", 
    XX.XX.XX.232 "BDE", 
    XX.XX.XX.233 "BDE", 
    XX.XX.XX.234 "BDE", 
    XX.XX.XX.235 "BDE", 
    XX.XX.XX.236 "BDE", 
    XX.XX.XX.237 "BDE", 
    XX.XX.XX.238 "BDE", 
    XX.XX.XX.239 "BDE", 
    XX.XX.XX.240 "BDE", 
    XX.XX.XX.241 "BDE", 
    XX.XX.XX.242 "BDE", 
    XX.XX.XX.243 "BDE", 
    XX.XX.XX.244 "BDE", 
    XX.XX.XY.14 "TEST", 
    XX.XX.XY.15 "TEST", 
    XX.XX.XY.16 "TEST", 
    XX.XX.XY.17 "TEST", 
    XX.XX.XY.18 "TEST", 
    XX.XX.XY.19 "TEST", 
    XX.XX.XY.20 "TEST", 
    XX.XX.XY.21 "TEST", 
    XX.XX.XY.22 "TEST", 
    XX.XX.XY.23 "TEST", 
    XX.XX.XY.24 "TEST", 
    XX.XX.XY.25 "TEST", 
    XX.XX.XY.26 "TEST", 
    XX.XX.XY.27 "TEST", 
    XX.XX.XY.28 "TEST", 
    XX.XX.XY.29 "TEST", 
    XX.XX.XY.30 "TEST", 
    XX.XX.XY.31 "TEST", 
    XX.XX.XY.32 "TEST", 
    XX.XX.XY.33 "TEST", 
    XX.XX.XY.34 "TEST", 
    XX.XX.XY.35 "TEST", 
    XX.XX.XY.36 "TEST", 
    XX.XX.XY.37 "TEST", 
    XX.XX.XY.38 "TEST", 
    XX.XX.XY.39 "TEST", 
    XX.XX.XY.40 "TEST", 
    XX.XX.XY.41 "TEST", 
    XX.XX.XY.42 "TEST", 
    XX.XX.XY.43 "TEST", 
    XX.XX.XY.44 "TEST" 
} 
+0

@ips包含日誌我必須與在該文件中定義的範圍匹配所有IP的,如果日誌IP的文件中的IP或IP範圍相匹配的話,我必須打印名稱 – Developer

+1

@Developer這是簡單足夠。首先建立完整的查找哈希。比起爲每條線路進行範圍匹配,這樣做比較便宜。 – simbabque