Утро / Вечер всех,
У меня возникла проблема, когда я делаю сценарий для работы, который использует ClamAV для сканирования на наличие вредоносных программ, а затем помещаю его результаты в MySQL, принимая полученные журналы ClamAV, используя grep с awk для преобразования нужных частей войти в переменную. У меня проблема в том, что, хотя я и сделал резюме, синтаксис обнаружений делает его немного сложнее. Я ни в коем случае не эксперт в regex, и это немного опыт обучения, так что, вероятно, есть гораздо лучший способ сделать это, чем я!
Строки, которые я пытаюсь разобрать, выглядят так:
/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
Некоторые из этих переменных взяты из других частей скрипта и могут быть проигнорированы. Причина, по которой я это делаю, заключается в том, чтобы сохранить беспорядок в лог-файле и получить простой веб-обзор состояния системы.
Есть какие-нибудь подсказки? Я иду обо всем этом неправильно? Заранее спасибо за помощь, я ценю это!