2016-08-22 3 views
0

이 스크립트는 F5 설정 파일의 풀 이름을 출력합니다.이 파일을 여러 개의 F5 설정 파일에서 실행하고 싶습니다.^pool에서 읽을 수 있기를 원합니다. ^^} (풀 OR) 줄 시작을 가져옵니다. ... 현재 2348 줄에서 읽으려는 스크립트를 말하면서 원하는 출력을 얻고 있습니다.파일의 일치하는 문자열에서 행을 읽습니다. python

내가 i의 사용을 제거하고 싶습니다. 다른 파일의 F5와 같은 xrange (2348) 설정 파일은

가 작동하는 방법 .. 작은 내가 스크립트가^풀 또는 ^}
현재 스크립트 파일의 라인으로 라인을 읽기 시작 얻을 경우되어 있습니다 :

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' 

감사합니다!

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

편집 됨 thanks .. – KiloBravo

답변

0

당신이 원하는 것을 완전히 명확하지 않다, 그러나 나는 생각하려고합니다 :에

-----------

의 conf 파일은 비슷합니다. 각 수영장마다 회원을 확보하려고합니다. 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'] 
관련 문제