Шаблон регулярного выражения, сопоставляющий IP и UserAgent в огромном файле - PullRequest
1 голос
/ 11 февраля 2009

У меня есть огромный файл журнала, который имеет такую ​​структуру:

ip=X.X.X.X
userAgent=Firefox
-----
Referer=hxxp://www.bla.org

Я хочу создать пользовательский вывод, например так: IP: UserAgent

Например:

X.X.X.X:Firefox

и шаблон будет игнорировать строки, которые не начинаются с ip = и userAgent =. (эти двое должны составить пару, как я упоминал выше.)

Я новичок в администрировании, и нашему клиенту сразу нужен отсортированный файл. Любая помощь будет чудесной. Спасибо.

Ответы [ 3 ]

3 голосов
/ 11 февраля 2009
^ip=(\d+(?:\.\d+){3})[\r\n]+userAgent=(.+)$

Применить в глобальном + многострочном режиме.

Группа 1 будет содержать IP-адрес, группа 2 будет содержать строку агента пользователя.

Редактировать: вышеприведенное выражение можно немного упростить, мы можем убрать проверку формата IP-адреса - при условии, что в файле журнала не будет ничего, кроме реальных IP-адресов:

^ip=(\d+\.?)+[\r\n]+userAgent=(.+)$
0 голосов
/ 13 февраля 2009

попробуйте (это ни в коем случае не надежно, если есть строки, в которых ваш файл журнала отличается от приведенного выше примера фрагмента):

sed -n -e '/^ip=/ {s///
N
s/\nuserAgent=/:/
p 
}' HugeFile > customoutput
0 голосов
/ 11 февраля 2009

Вы можете использовать:

^ip=((?:[0-9]{1,3}\.){3}[0-9]{1,3})$

И

^userAgent=(.*)$ 

Получите группу 1 для обоих, и у вас будут нужные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...