如何从日志文件中提取多个子字符串

如何从日志文件中提取多个子字符串

我正在尝试提取 apache 日志文件中调用的 URL 中的时间戳和数字字符串,如下所示:

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 '{print $4,$5} {print $6}' /var/log/httpd/access_log

请问我怎样才能删除数字字符串 2341231231234 以便时间戳和该字符串位于同一行?

答案1

假设所有行的 URL 格式相同,则可以使用sed以下命令获取时间戳和数字字符串:

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

该表达式采用[和内部存在的任何内容](应为时间戳)以及=%和之间存在的任何内容&sub(应为数字字符串)。

相关内容