Как извлечь несколько подстрок из файла журнала

1228
Sina

Я пытаюсь извлечь метку времени и числовую строку в URL, вызываемом в лог-файле apache, который выглядит следующим образом:

123.456.78.90 - - [16/Dec/2014:06:27:30 +0100] "GET /servlet/something.something=%2B2341231231234&subappid=hello&pass=hello&from=somebody&dlrreq=true&intflag=TRUE HTTP/1.1" 200 31 "-" "python-requests/2.5.0 CPython/2.7.3 Linux/2.6.32-431.el6.x86_64" 

Пока что я могу использовать awk для извлечения метки времени и всего URL.

awk ' ' /var/log/httpd/access_log 

Пожалуйста, как я могу удалить только номер строки 2341231231234, чтобы только отметка времени и эта строка находились на одной строке?

1

1 ответ на вопрос

0
jherran

Предполагая, что все ваши строки имеют одинаковый формат для URL, вы можете получить временную метку и числовую строку с помощью такой sedкоманды:

$ sed -r 's|.*\[(.*)\].*=%(.*)&sub.*|\1 \2|g' /var/log/httpd/access_log 16/Dec/2014:06:27:30 +0100 2B2341231231234 

Это выражение принимает все, что существует внутри [и ](должно быть меткой времени), и все, что существует между =%и &sub(должно быть числовой строкой).

Это может сработать, но я бы не стал делать предположения относительно порядка параметров URL. Поскольку HTTP не распознает порядок параметров, вы, вероятно, должны заставить свою команду работать безотносительно к порядку. krowe2 9 лет назад 1
Вау, спасибо, это прекрасно работает! Sina 9 лет назад 0

Похожие вопросы