![如何从日志文件中提取多个子字符串](https://linux22.com/image/1434105/%E5%A6%82%E4%BD%95%E4%BB%8E%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E4%B8%AD%E6%8F%90%E5%8F%96%E5%A4%9A%E4%B8%AA%E5%AD%90%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
我正在尝试提取 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
(应为数字字符串)。