Вопрос о том, как сделать фильтр, используя скрипт - PullRequest
0 голосов
/ 25 июня 2010

Я пытаюсь создать фильтр сценария, чтобы это произошло:

До:

123.125.66.126 - - [05/Apr/2010:09:18:12 -0300] "GET / HTTP/1.1" 302 290
66.249.71.167 - - [05/Apr/2010:09:18:13 -0300] "GET /robots.txt HTTP/1.1" 404 290
66.249.71.167 - - [05/Apr/2010:09:18:13 -0300] "GET /~leonardo_campos/IFBA/Web_Design_Aula_17.pdf HTTP/1.1" 404 324

После того, как:

[05/Apr/2010:09:18:12 -0300] / 302 290
[05/Apr/2010:09:18:13 -0300] /robots.txt 404 290
[05/Apr/2010:09:18:13 -0300] /~leonardo_campos/IFBA/Web_Design_Aula_17.pdf 404 324

Если бы кто-то мог помочь, было бы здорово ...

Заранее спасибо!

Ответы [ 4 ]

1 голос
/ 25 июня 2010

если ваша файловая структура всегда такая, вы можете просто использовать поля.нет необходимости сложное регулярное выражение

$ awk '{print $4,$5,$7,$9,$10}' file
[05/Apr/2010:09:18:12 -0300] / 302 290
[05/Apr/2010:09:18:13 -0300] /robots.txt 404 290
[05/Apr/2010:09:18:13 -0300] /~leonardo_campos/IFBA/Web_Design_Aula_17.pdf 404 324
1 голос
/ 25 июня 2010

Сед - ваш друг здесь с регулярными выражениями.

sed 's/^\(\[.*\]\) "GET \(.*\) .*" \(.*\)$/\1 \2 \3/'
1 голос
/ 25 июня 2010

Поддержка всех методов HTTP:

sed 's#.*\(\[[^]]*\]\).*"[A-Z]* \(.*\) HTTP/[0-9.]*" \(.*\)#\1 \2 \3#'
1 голос
/ 25 июня 2010

Кажется, идеальная работа для "сед".

Вы можете легко создать пару "s" шаблонов замены, чтобы удалить ненужные фрагменты линий.

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