早/晚全部插入,在bash腳本解析ClamAV的日誌使用正則表達式在MySQL
我有哪裏我正在爲使用ClamAV的掃描惡意軟件的工作,然後將腳本中的問題這是MySQL的結果,通過使用grep和awk生成的ClamAV日誌將日誌的右側部分轉換爲變量。我遇到的問題是,雖然我已經完成了總結,但檢測的語法使其稍微困難一些。我在任何方面都不是正則表達式方面的專家,這是一種學習體驗,因此可能比我有更好的方法!
的線,我試圖解析看起來好像是這些:
/net/nas/vol0/home/recep/SG4rt.exe: Worm.SomeFool.P FOUND
/net/nas/vol0/home/recep/SG4rt.exe: moved to '/srv/clamav/quarantine/SG4rt.exe'
至於我能夠確定,我需要一個積極的回顧後,以匹配之後和冒號之前發生了什麼,而無需實際匹配冒號或後面的空格,而我無法從RegExr中看到明確的方式,而沒有考慮到我試圖尋找兩個冒號。更糟糕的是,我們有時把這些太...
WARNING: Can't open file /net/nas/vol0/home/laser/samples/sample1.avi: Permission denied
最終的結果是,我可以建立一個MySQL查詢插入路徑,惡意軟件發現,它被轉移到或者出現錯誤然後是路徑,然後遇到錯誤,以便將每個元素轉換爲while語句中的變量內容。
我已經做了掃描內容摘要如下:
總結是這樣的:
----------- SCAN SUMMARY -----------
Known viruses: 329
Engine version: 0.97.1
Scanned directories: 17350
Scanned files: 50342
Infected files: 3
Total errors: 1
Data scanned: 15551.73 MB
Data read: 16382.67 MB (ratio 0.95:1)
Time: 3765.236 sec (62 m 45 s)
解析如下:
SCANNED_DIRS=$(cat /srv/clamav/$IY-scan-$LOGTIME.log | grep "Scanned directories" | awk '{gsub("Scanned directories: ", "");print}')
SCANNED_FILES=$(cat /srv/clamav/$IY-scan-$LOGTIME.log | grep "Scanned files" | awk '{gsub("Scanned files: ", "");print}')
INFECTED=$(cat /srv/clamav/$IY-scan-$LOGTIME.log | grep "Infected files" | awk '{gsub("Infected files: ", "");print}')
DATA_SCANNED=$(cat /srv/clamav/$IY-scan-$LOGTIME.log | grep "Data scanned" | awk '{gsub("Data scanned: ", "");print}')
DATA_READ=$(cat /srv/clamav/$IY-scan-$LOGTIME.log | grep "Data read" | awk '{gsub("Data read: ", "");print}')
TIME_TAKEN=$(cat /srv/clamav/$IY-scan-$LOGTIME.log | grep "Time" | awk '{gsub("Time: ", "");print}')
END_TIME=$(date +%s)
mysql -u scanner_parser --password=removed sc_live -e "INSERT INTO bs.live.bs_jobstat VALUES (NULL, '$CURRTIME', '$PID', '$IY', '$SCANNED_DIRS', '$SCANNED_FILES', '$INFECTED', '$DATA_SCANNED', '$DATA_READ', '$TIME_TAKEN', '$END_TIME');"
rm -f /srv/clamav/$IY-scan-$LOGTIME.log
其中有些變量是從其它部分腳本,可以忽略。我這樣做的原因是爲了節省日誌文件的混亂,並有一個簡單的基於Web的系統狀態概述。
任何線索?我是否以錯誤的方式去解決這一切?感謝您的幫助,我非常感謝!
我希望他們都以WARNING,ERROR或INFO開頭,但是對於ClamAV他們有點混合。檢測開始於在行尾檢測到惡意軟件的惡意軟件的路徑。儘管如此,我可以通過在該行末尾出現單詞「FOUND」來匹配它,但是無論從它出來的任何正則表達式都必須確保它在最後,以防萬一有文件帶有錯誤在其中出現「FOUND」字樣,Web界面表示這是一個檢測而不是錯誤。我想我已經走過了很長的一段路,而且還有另一種選擇。從來沒有做過Perl! –
你能提取正確的線條嗎?找到以FOUND結尾的單詞並不難。至於你是否正在採取正確或錯誤的方式,下面是一件事情:日誌處理應該是關於每次查看日誌的每一行,並且對該行進行處理或將其扔掉。在你的情況下,對於每一行,你都會碰到零個或更多的某種計數器。爲此,人們通常使用Perl,Python或Ruby。 –
我會聽取您的建議,並以此爲契機來選擇Perl。只要我能夠與MySQL交談,我應該沒問題,但我很肯定這是可能的。 ;) –