ファイル内のIPアドレスグループを探す

ファイル内のIPアドレスグループを探す

IPアドレスグループを含むファイルがあります。ファイルは次のようになります。

London:
1.1.1.0-1.1.1.200
172.25.2.0-172.25.2.100
Germany:
2.2.2.0-2.2.2.100
192.168.1.0-192.168.1.200
172.25.2.0-172.25.2.200

したがって、IPアドレス()を検索すると./program.sh 172.25.2.32ロンドンとドイツが出力されるはずです。

ベストアンサー1

他の解決策を受け入れませんでした。これは、その出力が要求された「ロンドンとドイツ」と一致しないためです。

最新のPythonはIPアドレスを直接処理できます。

#! /usr/bin/env python3.4
# coding: utf-8
# also works on 2.7 after installing ipaddress from PyPI

import sys
from ipaddress import ip_address
print

ip_string = sys.argv[1]
if sys.version_info < (3,):
    ip_string = ip_string.decode('utf-8')

ip = ip_address(ip_string)

locs = []
for line in open('input'):
    try:
        loc, rest = line.split(':')
    except ValueError:
        try:
            if sys.version_info < (3,):
                sr, er = map(ip_address, [x.decode('utf-8') for x in line.rstrip().split('-')])
            else:
                sr, er = map(ip_address, line.rstrip().split('-'))
            if sr < ip < er:
                locs.append(loc)
        except ValueError:
            print 'error in input line:', repr(line)
            break

if len(locs) > 2:
    locs = [', '.join(locs[:-1]), locs[-1]]
print(' and '.join(locs))

これは見つかった場所を印刷し、and見つかった最後の2つの場所の間に「」を入れ、該当する,場合は他のすべての場所の間に「」を入れます。London, Paris and Germany

データがという名前のファイルにあるとし、inputスクリプトを実行可能にするか、次を使用します。python scriptname 172.25.2.32

おすすめ記事