2016-08-22 3 views
0

私はこのスクリプトを使ってF5設定ファイルからプール名を表示します。これを複数のF5設定ファイルで実行したいのですが、^ pool | ^}(プールOR)行の始まりを持ってください...私は私の望む出力を私が行2348から読むように教えているときに瞬間に...ファイル内の一致文字列から行を読み込みます。

私は私の使用を排除したいxrange(2348)F5の設定ファイルが小さくなっている他のファイルなど..

私はスクリプトが^プールまたは^からファイルの行ごとの読み取りを開始するために取得する場合、それがうまくいく方法である}
現在のスクリプト:

import re 
seenrule = 'false' 

File = open("/home/t816874/F5conf/unzip/config/bigip.conf", "r") 
for i in xrange(2348): 
     File.next() 

for line in File: 
     if re.match("(^pool p)", line, re.IGNORECASE): 
       a = line.lstrip("pool p") 
       ONE = a[:-2] 
       print "Pool Name:", ONE 

     if re.findall(r'(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d] {1,3})', line): 
       if seenrule == 'false': 
         x = line.lstrip("members ") 
         print x 

if re.match("(^rule)", line): 
     seenrule = 'true' 

--------------------------------------------- ------------------

私の試み:あなたの助けみんなのため

import re 
seenrule = 'false' 
startline = 'false' 

File = open("/home/t816874/F5conf/unzip/config/bigip.conf", "r") 
if re.match("(^pool|^})", line): 
     startline = 'true' 

for line in File: 
     if re.match("(^pool p)", line, re.IGNORECASE): 
       a = line.lstrip("pool p") 
       ONE = a[:-2] 
       print "Pool Name:", ONE 

     if re.findall(r'(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d] {1,3})', line): 
       if seenrule == 'false': 
         x = line.lstrip("members ") 
         print x 

if re.match("(^rule)", line): 
     seenrule = 'true' 

ありがとう!

-----------

confファイルは次のようになります。

node 172.0.0.0 { 
    screen ab2583-1.2 
} 
node 172.0.0.1 { 
    screen ab2583-1.3 
} 
node 172.0.0.3 { 
    screen ab2584-1.2 
} 
pool pWWW_abcd_HTTPS { 
    lb method member predictive 
    monitor all mWWW_staging.telecom_TCP 
    members { 
     0.0.0.0:8421 {} 
     0.0.0.1:18431 { 
     session user disabled 
     } 
     0.0.0.2:8421 {} 
     0.0.0.3:18431 { 
     session user disabled 
     } 
    } 
} 
pool pWWW_vcm2APP.defg_HTTP { 
    lb method member predictive 
    monitor all mWWW_vcm2APP.defg_TCP 
    members 0.0.0.5:27110 {} 
} 
node.. 
.... 
. 
+0

あなたは読んでいるところから正規表現を使ってマッチングしようとしているところからconfファイルの内容を共有できますか? –

+1

編集ありがとう.. – KiloBravo

答えて

0

あなたが望むものを完全に明らかではないが、私は推測してみましょう。あなたは各プールのメンバーを取得しようとしています。 seenruleについて何も言及していないので、私はそれを落としました。

あなたはこのデータ構造を解析したくない場合は、トップレベルのブロックは常にとexlusivelyライン'}\n'で終わる場合、あなたはこのような何か行うことができます。

import re 
f = open('/home/t816874/F5conf/unzip/config/bigip.conf', 'r') 

# Iterate over lines. 
for line in f: 
    # If pool block is met. 
    if line.startswith('pool p'): 
     pname = line.split()[1] 
     pmembers = [] 
     # Iterate over block. 
     # Block is expected to be terminated by line '}\n'. 
     for pline in iter(lambda: next(f), '}\n'): 
      members = re.findall(r'\d{1,3}(?:\.\d{1,3}){3}:\d{1,5}', pline) 
      pmembers.extend(members) 

     print(pname, pmembers) 

f.close() 

出力:

pWWW_abcd_HTTPS ['0.0.0.0:8421', '0.0.0.1:18431', '0.0.0.2:8421', '0.0.0.3:18431'] 
pWWW_vcm2APP.defg_HTTP ['0.0.0.5:27110'] 
関連する問題