2013-08-16 2 views
0

다음과 같이 ASCII 대문자 입력 텍스트 파일이 1 개 있습니다. 여기에 2 개의 스위치 케이스가 있습니다. 내가 필요한 것은 모든 문자열을 아래의 텍스트 파일에서 세부 함수 (굵게)로 '$'로 시작하고 새 파일 1에 넣어야합니다. 그러면 nvp_add 함수에서 '$'로 시작하는 모든 문자열을 추출해야합니다 (굵은 체로) 아래 TEXTFILE과 새 파일 2. 이 같은 출력 기대하고 있습니다에 넣어 :


case "11": ### eventDDoSLow 

$ 심각도, $ 설명, $ :

예상 출력은 파일 1로 eventID, $ eventURL, $ alertLevel, $ eventStart, $ eventSourceCount

case "15": ### eventWormLow 
,

$ 심각도 $ 설명, $ EVENTID, $ eventURL, $ alertLevel, $ eventStart, $ eventSourceCount, $ eventSourceTable, $ eventDestCount, $ eventDestTable, $ eventProtocolCount, $ eventProtocolTable, $ eventServiceCount, $ eventServiceTable, $ mazuSourceName


case "11": ### eventDDoSLow 

$ 심각도, $ 설명, $ 이벤트 ID, $ eventURL, $ alertLevel, $ eventStart, $ eventSourceCount

,321 :

예상 출력 파일이있을 수 있습니다 0

$ 심각도 $ 설명, $ EVENTID, $ eventURL, $ alertLevel, $ eventStart, $ eventSourceCount, $ eventSourceTable, $ eventDestCount, $ eventDestTable, $ eventProtocolCount, $ eventProtocolTable, $ eventServiceCount, $ eventServiceTable, $ mazuSourceName

입력 파일 (일반 아스키는) :


switch($specific-trap) 
{ 


    case "11": ### eventDDoSLow 

     ########## 
     # $1 = severity 
     # $2 = description 
     # $3 = eventID 
     # $4 = eventURL 
     # $5 = alertLevel 
     # $6 = eventStart 
     # $7 = eventSourceCount 
     # $8 = eventSourceTable 
     # $9 = eventDestCount 
     # $10 = eventDestTable 
     # $11 = eventProtocolCount 
     # $12 = eventProtocolTable 
     # $13 = eventServiceCount 
     # $14 = eventServiceTable 
     # $15 = eventNormalBPS 
     # $16 = eventCurrentBPS 
     # $17 = eventNormalPPS 
     # $18 = eventCurrentPPS 
     ########## 

     $severity = $1 
     $description = $2 
     $eventID = $3 
     $eventURL = $4 
     $alertLevel = lookup($5, AlertLevel) 
     $eventStart = $6 
     $eventSourceCount = $7 
     $eventSourceTable = $8 
     $eventDestCount = $9 
     $eventDestTable = $10 
     $eventProtocolCount = $11 
     $eventProtocolTable = $12 
     $eventServiceCount = $13 
     $eventServiceTable = $14 
     $eventNormalBPS = $15 
     $eventCurrentBPS = $16 
     $eventNormalPPS = $17 
     $eventCurrentPPS = $18 

     include "$NC_RULES_HOME/include-snmptrap/riverbed/riverbed- 
MAZU-MIB.parser.include.snmptrap.rules" 

     @URL = $eventURL 

     $OS_EventId = "SNMPTRAP-riverbed-MAZU-MIB-eventDDoSLow" 

     @AlertGroup = "Denial Of Service" 
     @AlertKey = "Event ID: " + $eventID 
     @Summary = "Denial of Service (Src: " + $mazuSourceName + ", Dest: " + 
$mazuDestName + ")" + " (" + @AlertKey + ") " 

     $DEFAULT_Severity = 2 
     $DEFAULT_Type = 1 
     $DEFAULT_ExpireTime = 0    

     @Identifier = @Node + " " + @AlertKey + " " + @AlertGroup + " " + 
$DEFAULT_Type + " " + @Agent + " " + @Manager + " " + $specific-trap 

     $alertLevel = $alertLevel + " (" + $5 + ")" 
     if(match($OPTION_EnableDetails, "1") or 
match($OPTION_EnableDetails_riverbed, "1")) { 
      **details****($severity, $description, $eventID, $eventURL, $alertLevel, 
$eventStart, $eventSourceCount)** 
     } 
     **@ExtendedAttr = **nvp_add**(@ExtendedAttr, "severity", $severity, 
"description", $description, "eventID", $eventID, 
      "eventURL", $eventURL, "alertLevel", $alertLevel, 
"eventStart", $eventStart, 
      "eventSourceCount", $eventSourceCount)** 

    case "15": ### eventWormLow 

     ########## 
     # $1 = severity 
     # $2 = description 
     # $3 = eventID 
     # $4 = eventURL 
     # $5 = alertLevel 
     # $6 = eventStart 
     # $7 = eventSourceCount 
     # $8 = eventSourceTable 
     # $9 = eventDestCount 
     # $10 = eventDestTable 
     # $11 = eventProtocolCount 
     # $12 = eventProtocolTable 
     # $13 = eventServiceCount 
     # $14 = eventServiceTable 
     ########## 

     $severity = $1 
     $description = $2 
     $eventID = $3 
     $eventURL = $4 
     $alertLevel = lookup($5, AlertLevel) 
     $eventStart = $6 
     $eventSourceCount = $7 
     $eventSourceTable = $8 
     $eventDestCount = $9 
     $eventDestTable = $10 
     $eventProtocolCount = $11 
     $eventProtocolTable = $12 
     $eventServiceCount = $13 
     $eventServiceTable = $14 

     include "$NC_RULES_HOME/include-snmptrap/riverbed/riverbed- 
MAZU-MIB.parser.include.snmptrap.rules" 

     @URL = $eventURL 

     $OS_EventId = "SNMPTRAP-riverbed-MAZU-MIB-eventWormLow" 

     @AlertGroup = "Worm Detected" 
     @AlertKey = "Event ID: " + $eventID 
     @Summary = "Worm Detected (Src: " + $mazuSourceName + ", Dest: " + 
$mazuDestName + ")" + " (" + @AlertKey + ") " 

     $DEFAULT_Severity = 2 
     $DEFAULT_Type = 1 
     $DEFAULT_ExpireTime = 0    

     @Identifier = @Node + " " + @AlertKey + " " + @AlertGroup + " " + 
$DEFAULT_Type + " " + @Agent + " " + @Manager + " " + $specific-trap 

     $alertLevel = $alertLevel + " (" + $5 + ")" 
     if(match($OPTION_EnableDetails, "1") or 
match($OPTION_EnableDetails_riverbed, "1")) { 
      **details($severity, $description, $eventID, $eventURL, $alertLevel, 
$eventStart, $eventSourceCount, $eventSourceTable, $eventDestCount, $eventDestTable, 
$eventProtocolCount, $eventProtocolTable, $eventServiceCount, $eventServiceTable, 
$mazuSourceName)** 
     } 
     **@ExtendedAttr = nvp_add(@ExtendedAttr, "severity", $severity, "description", $description, "eventID", $eventID, 
      "eventURL", $eventURL, "alertLevel", $alertLevel, "eventStart", $eventStart, 
      "eventSourceCount", $eventSourceCount, "eventSourceTable", $eventSourceTable, "eventDestCount", $eventDestCount, 
      "eventDestTable", $eventDestTable, "eventProtocolCount", $eventProtocolCount, "eventProtocolTable", $eventProtocolTable, 
      "eventServiceCount", $eventServiceCount, "eventServiceTable", $eventServiceTable, "mazuSourceName", $mazuSourceName)** 
+0

2 시간 전에 다음 질문을했습니다. http://stackoverflow.com/questions/18267978/how-to-extract-certain-strings-start-with-a-symbol-from-a-text -file-in-python –

+0

다르지 않습니다. – user2671444

+0

아무도이 작업을 수행하는 방법에 대한 아이디어가 있습니까? – user2671444

답변

0
import re 


functions = ["details", "nvp_add"] 
caselines_index = [] 
cases = [] 
readlines = [] 

def read(in_file): 
    global cases 
    global caselines_index 
    global readlines 
    with open(in_file, 'r') as file: 
    for line in file.readlines(): 
     readlines.append(line.strip()) 
    for line in readlines: 
     case_search = re.search("case\s\".+?\"\:\s", line) 
     if case_search: 
     caselines_index.append(readlines.index(line)) 
    print caselines_index 
    caselines_index_iter = iter(caselines_index) 
    int_line_index = int(next(caselines_index_iter)) 
    int_next_index = int(next(caselines_index_iter)) 
    while True: 
     try: 
     case_text = ' '.join(readlines[int_line_index:int_next_index]).strip() 
     case = [readlines[int_line_index].strip(), case_text] 
     cases.append(case) 
     int_line_index = int_next_index 
     int_next_index = int(next(caselines_index_iter)) 
     except StopIteration: 
     case_text = ' '.join(readlines[int_line_index:len(readlines) - 1]).strip() 
     case = [readlines[int_line_index].strip(), case_text] 
     cases.append(case) 
     break 

def work(): 
    for func in functions: 
    with open(func+".txt", 'w+') as result_file: 
     for case_list in cases: 
     caseline = case_list[0].strip() 
     result_file.write(caseline + "\n") 
     nvp = re.findall(func+"\(.+?\)", case_list[1].strip()) 

     for item in nvp: 
      result_list = re.findall("(\$.+?)[\,\)]", item) 

      for result in result_list: 
      if "$*" not in result: 
       result_file.write(result + "\n") 

def main(): 
    global functions 
    in_file = "input.txt" 
    read(in_file) 
    work() 


if __name__=="__main__": 
    main() 

나는 그것을 시도하고 작동합니다.

+0

wow ur 화려한 vaihav 작품 !!!! – user2671444