2014-03-06 28 views
1

對於日誌分析,我需要在日誌文件中刪除的模式:刪除線圖形腳本沒有充分發揮作用

模式:

艾策斯:講座最近搜索(OU清單當然德劇目)權限: - 農布雷迪奧斯SID restreint:0面膜d ACCES:爲0x1「

登錄樣品:

# This line has to be kept 
2014-03-03 09:50:20,2014-03-03 09:50:20,560,Success Audit event,Accès aux objets,Security,LA\USER1,LA-SERVER1,"Objet ouvert : Serveur de l’objet : Security Type d’objet : File Objet : \vol\vol01\PROD\prod.conf Identificateur du handle : 554 Identificateur de l’opération : - ID du processus : 2050 Nom du fichier image : Server Soft Utilisateur principal : user1 Domaine principal : LA ID d’ouv. de session principale : (0x0, 0x9596) Utilisateur client : 1.2.3.4 Domaine client : - ID d’ouv. de session client : - Acces : Lecture données (ou liste de répertoire) Écriture données (ou ajout fichier) Ajout données (ou ajout sous-répertoire ou créer instance de canal) WRITE_DAC Privilèges : - Nombre de SID restreint : 0 Masque d’accès : 0x40007 " 
# This line has to be removed 
2014-03-03 09:52:20,2014-03-03 09:50:20,560,Success Audit event,Accès aux objets,Security,LA\USER2,LA-SERVER1,"Objet ouvert : Serveur de l’objet : Security Type d’objet : File Objet : \vol\vol01\PROD\prod.conf Identificateur du handle : 554 Identificateur de l’opération : - ID du processus : 2050 Nom du fichier image : Server Soft Utilisateur principal : user1 Domaine principal : LA ID d’ouv. de session principale : (0x0, 0x9597) Utilisateur client : 1.2.3.5 Domaine client : - ID d’ouv. de session client : - **Acces : Lecture donnees (ou liste de repertoire) Privileges : - Nombre de SID restreint : 0 Masque d acces : 0x1 "** 
# This line has to be removed 
2014-03-03 09:53:20,2014-03-03 09:50:20,560,Success Audit event,Accès aux objets,Security,LA\USER3,LA-SERVER1,"Objet ouvert : Serveur de l’objet : Security Type d’objet : File Objet : \vol\vol01\PROD\prod.conf Identificateur du handle : 554 Identificateur de l’opération : - ID du processus : 2050 Nom du fichier image : Server Soft Utilisateur principal : user1 Domaine principal : LA ID d’ouv. de session principale : (0x0, 0x9597) Utilisateur client : 1.2.3.6 Domaine client : - ID d’ouv. de session client : - **Acces : Lecture donnees (ou liste de repertoire) Privileges : - Nombre de SID restreint : 0 Masque d acces : 0x1 "** 

我發現了一個腳本here(感謝ATOzTOA)來完成這項工作(我只是說sys模塊):

import sys 
fname = sys.argv[1] 
def delete_line(dello): 

    data = open(fname).readlines() 

    i = 0 
    for line in data: 
     if dello in line: 
      data.pop(i) 
     i += 1 

    open(fname, "w").write("".join(data)) 
delete_line("Acces : Lecture donnees (ou liste de repertoire) Privileges : - Nombre de SID restreint : 0 Masque d acces : 0x1\"") 

當我運行該腳本,它並沒有消除兩行日誌的內容包含模式:只的一個二。

我要再次運行一次或兩次的腳本刪除所有行

我不知道爲什麼。

回答

0

致電pop()時,您不應增加i。此外,迭代列表時不應使用pop()。這是因爲如果從列表中間刪除元素,則在迭代時跳過一些項目。

您應該重寫delete_line()如下:

def delete_line(dello): 
    with open(fname) as f: 
     data = [line for line in f if dello not in line] 
    with open(fname, 'w') as f: 
     f.write(''.join(data)) 

(請注意,有改進的餘地。)

的另一個問題是,你是給delete_line()錯誤的說法:有0x1之間的空間和"。這是正確的路線:

delete_line('Acces : Lecture donnees (ou liste de repertoire) Privileges : - Nombre de SID restreint : 0 Masque d acces : 0x1 "') 

順便說一句,已經有一個從文件過濾掉行一個很好的計劃:這是grep(與-v選項)。

+0

@lexa:對不起,我沒有注意到一些其他問題。 –

+0

向原始代碼添加其他代碼不起作用,但您的第二次代碼重寫完美。事實上,原木有很多種線條(我有一條有5萬條線),我試過了! – lexa

+0

@lexa:'else'不起作用,因爲您在修改列表時正在循環列表。解決這個問題的一種方法是使用'in line in list(data)',但這太過於誇張。 –

0

我無法在本地複製您的錯誤。但是,我會建議您可以嘗試使用python替換方法。

http://www.tutorialspoint.com/python/string_replace.htm str.replace(舊的,新[,MAX])

,這將與你想在你串什麼替代它進行搜索。

因此,一個可能的解決方案,您的問題將是:

import sys 
fname = sys.argv[1] 

def delete_line(dello): 
    cleaned_data = [] 
    data = open(fname).readlines() 

    for line in data: 
     line = line.replace(dello, "") 
     cleaned_data.append(line) 

    open(fname, "w").write("".join(data))  


delete_line("Acces : Lecture donnees (ou liste de repertoire) Privileges : - Nombre de SID restreint : 0 Masque d acces : 0x1\"") 

可以更換你與列表理解循環

clean_data = [line.replace(dello,"") for line in data] 
+0

我有「UnboundLocalError:本地變量」行在引用前引用「。你有沒有一樣的? – lexa

+0

對不起,lexa這是一個錯字。它應該是「爲日期線:行.... – biobirdman

+0

沒問題,無論如何我測試你的代碼和模式不會被刪除..你試過在你身邊? – lexa