2016-08-26 5 views
-4

Ich habe eine Syslog-Datei mit diesem Format.Python Regex Parsing von Syslog

Mar 7 13:44:55 host.domain.example.net/10.10.10.10 Application: Info: MODULE: Startup MESSAGE: Application Version: 8.44.0 
Mar 7 13:44:55 host.domain.example.net/10.10.10.10 Application: Info: MODULE: Startup MESSAGE: Run on system: host 
Mar 7 13:44:55 host.domain.example.net/10.10.10.10 Application: Info: MODULE: Startup MESSAGE: Running as user: SYSTEM 
Mar 7 13:44:55 host.domain.example.net/10.10.10.10 Application: Info: MODULE: Startup MESSAGE: User has admin rights: yes 
Mar 7 13:44:55 host.domain.example.net/10.10.10.10 Application: Info: MODULE: Startup MESSAGE: Start Time: 2016-03-07 13:44:55 
Mar 7 13:44:55 host.domain.example.net/10.10.10.10 Application: Info: MODULE: Startup MESSAGE: IP Address: 10.10.10.10 
Mar 7 13:44:55 host.domain.example.net/10.10.10.10 Application: Info: MODULE: Startup MESSAGE: CPU Count: 1 
Mar 7 13:44:55 host.domain.example.net/10.10.10.10 Application: Info: MODULE: Startup MESSAGE: System Type: Server 
Mar 7 13:44:55 host.domain.example.net/10.10.10.10 Application: Info: MODULE: Startup MESSAGE: System Uptime: 18.10 days 
Mar 7 13:44:55 host.domain.example.net/10.10.10.10 Application: MODULE: InitHead MESSAGE: => Reading signature and hash files ... 
Mar 7 13:44:55 host.domain.example.net/10.10.10.10 Application: Notice: MODULE: Init MESSAGE: file-type-signatures.cfg initialized with 80 values. 
Mar 7 13:44:56 host.domain.example.net/10.10.10.10 Application: Notice: MODULE: Init MESSAGE: signatures/filename-characteristics.dat initialized with 2778 values. 
Mar 7 13:44:56 host.domain.example.net/10.10.10.10 Application: Notice: MODULE: Init MESSAGE: signatures/keywords.dat initialized with 63 values. 
Some logs ... 
Mar 7 17:42:08 host.domain.example.net/10.10.10.10 Application: Results: MODULE: Report MESSAGE: Results: 0 Alarms, 0 Warnings, 131 Notices, 2 Errors 
Mar 7 17:42:08 host.domain.example.net/10.10.10.10 Application: End: MODULE: Report MESSAGE: Begin Time: 2016-03-07 13:44:55 
Mar 7 17:42:08 host.domain.example.net/10.10.10.10 Application: End: MODULE: Report MESSAGE: End Time: 2016-03-07 17:42:07 
Mar 7 17:42:08 host.domain.example.net/10.10.10.10 Application: End: MODULE: Report MESSAGE: Scan took 3 hours 57 mins 11 secs 

Wie die "Application Version" zu extrahieren, "Run auf System", "Startzeit", "IP-Adresse", "CPU Count", "Systemtyp" "Benutzer Admin-Rechte hat", " System Uptime "," End Time "und Anzahl der" Alarme "," Warnungen "," Hinweise "," Fehler "mit Python?

Eigentlich bin ich neu bei Python, also weiß ich wirklich nicht, wie es geht. aber ich schaffte es eine Funktion namens Finder()

def finder(fname,str): 
    with open(fname, "r") as hand: 
     for line in hand: 
      line = line.rstrip() 
      if re.search(str, line): 
       return line 

zu machen und die Zeile mit der IP-Adresse zu bekommen ich es mit

finder("file path","MESSAGE: IP Address") 

Dies druckt volle Linie nennen, ich brauche Hilfe nur zu bekommen dass ipaddress Teil, und Rest von anderen Informationen in anderen Zeilen sowie.

+0

Wenn (wie Ihr Titel schon sagt) Sie benutzen Regex, welches Muster hast du versucht? –

+0

Bitte teilen Sie Ihren Code und Fehler wenn überhaupt –

+0

Eigentlich bin ich neu in Python so wirklich ich weiß nicht, wie es geht. aber ich schaffte es eine Funktion namens Finder def Finder (fname, str) zu machen: mit offenem (fname, "r") als Hand: für Linie in der Hand: line = line.rstrip() wenn re. Suche (str, Zeile): Rückleitung und die Zeile mit dem IP-Adresse bekommen ich es mit Finder nenne (Dateipfad „NACHRICHT: IP-Adresse“) Diese alle Zeilen gedruckt werden, ich brauche Hilfe um nur diesen ipaddress Teil zu bekommen, und Rest von anderen Informationen in anderen Zeilen auch. – Opera

Antwort

0

Bitte überprüfen Sie die folgenden Links, bevor Sie den Code durchgehen. Es wird dir sehr helfen.

  1. re module - Das verwendete Modul. Dieser Link hat eine gute Erklärung zusammen mit Beispielen
  2. Python Regex Tester - Hier können Sie Ihre Regex und die Regex bezogenen Funktionen mit Python verfügbar testen. Ich habe das gleiche verwendet, um den regulären Ausdruck zu testen ich unten verwendet habe:
  3. mit Kommentaren

-Code inline

import re 
fo = open("out.txt", "r") 
#The information we need to collect. 
info_list =["Application Version", "Run on system", "User has admin rights", "Start Time", "IP Address", "CPU Count", "System Type", "System Uptime", "End Time", "Results","Begin Time"] 
for line in fo: 
    for srch_pat in info_list: 
     #First will search if the inforamtion we need is present in line or not. 
     if srch_pat in line: 
      #This will get the exact information. For e.g, version number in case of Application Version 
      regex = re.compile(r'MESSAGE:\s+%s:\s+(.*)'%srch_pat) 
      m = regex.search(line) 

      if "Results" in srch_pat: 
       #For result, this regex will get the required info 
       result_regex = re.search(r'(\d+)\s+Alarms,\s+(\d+)\s+Warnings,\s+(\d+)\s+Notices,\s+(\d+)\s+Errors',m.group(1)) 
       print 'Alarms - ',result_regex.group(1) 
       print 'Warnings - ',result_regex.group(2) 
       print 'Notices - ',result_regex.group(3) 
       print 'Errors - ',result_regex.group(4) 
      else: 
       print srch_pat,'-',m.group(1) 

Ausgabe

C:\Users\dinesh_pundkar\Desktop>python a.py 
Application Version - 8.44.0 
Run on system - host 
User has admin rights - yes 
Start Time - 2016-03-07 13:44:55 
IP Address - 10.10.10.10 
CPU Count - 1 
System Type - Server 
System Uptime - 18.10 days 
Alarms - 0 
Warnings - 0 
Notices - 131 
Errors - 2 
Begin Time - 2016-03-07 13:44:55 
End Time - 2016-03-07 17:42:07 
+0

Das funktioniert wirklich :-) Danke Dinesh – Opera