Я фильтрую большой файл журнала веб-доступа и создаю около десятка меньших в зависимости от соответствия регулярному выражению. Поскольку у меня мало опыта работы с регулярным выражением, я бы хотел выяснить, как оптимизировать шаблоны для повышения производительности.Оптимизировать соответствие RegEx в PowerShell
Источник отформатирован следующим образом:
2015-06-14 00:00:06 38.75.53.205 - HTTP 10.250.35.69 80 GET /en/process/dsa/policy/wbss/wbss_current/wbss2013/Wbss13.pdf - 206 299 16722 0 HTTP (etc)
или
2015-06-13 00:00:31 1.22.55.170 - HTTP 157.150.186.68 80 GET /esd/sddev/enable/compl.htm - 200 396 23040 0 HTTP/1.1 Mozilla (etc)
Ниже приведены некоторые из моих шаблонов регулярных выражений. Все они смотрят в одну и ту же область каждой линии, после GET. Вот как у меня их сейчас:
dsq = "(/esd/sddev/| /creative/)"
dpq = "/dsa/policy/"
pop = "(^((?! /popq/ /caster/(dsa/(policy|qsc|qlation))|(esd/(fed|cdq|qaccount|sddev|creative|forums/rdev))).)*$)"
Первые два надеется соответствовать указанной модели, в то время как «поп» должна соответствовать все, кроме указанных моделей.
Это работает так, как есть, но поскольку мои файлы журналов имеют тенденцию к довольно большой (1 ГБ и больше), и у меня есть 12 разных шаблонов, чтобы соответствовать, я надеялся, что может быть способ улучшить производительность этих шаблонов ,
Что касается использования, у меня есть следующий код, где $profile
является одним из тех, которые перечислены выше (они находятся в хэш-таблице, и цикл I через них отдельно):
Get-Content $sourcefile -ReadCount 5000 |
ForEach { $_ -match $profile | Add-Content targetfile }
Спасибо всем за любое понимание!
[ConvertFrom-String] (http://blogs.msdn.com/b/powershell/archive/2014/10/31/convertfrom-string-example-based-text-parsing.aspx) может помочь – StegMan
Я думаю что StegMan говорит, что его предложение состоит в том, чтобы взять каждую строку и преобразовать ее в объект PowerShell, чтобы вы могли делать более целенаправленные поиски данных. – Matt
Как вы выполняете эти регулярные выражения в отношении файлов, особенно последних? Это было бы очень важно здесь. Я хотел бы, чтобы вы разрушили то, как вы хотите, чтобы последнее регулярное выражение работало. Вероятно, можно улучшить внешний вид и квантификатор. – Matt