我正在尝试提取 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
(应为数字字符串)。