【发布时间】:2011-12-19 03:58:39
【问题描述】:
我正在为我公司的 S3 存储桶设置 ETL 流程,以便我们可以跟踪我们的使用情况,但我在拆分 S3 日志文件的列时遇到了一些麻烦,因为 Amazon 使用空格、双引号和正方形括号来分隔列。
我在这个 SO 帖子中找到了这个正则表达式:[^\\s\"']+|\"([^\"]*)\"|'([^']*)':Regex for splitting a string using space when not surrounded by single or double quotes,这让我非常接近。我只需要帮助调整它以忽略单引号并忽略“[”和“]”之间的空格
这是我们文件之一的示例行:
dd8d30dd085515d73b318a83f4946b26d49294a95030e4a7919de0ba6654c362 ourbucket.name.config [31/Oct/2011:17:00:04 +0000] 184.191.213.218 - 013259AC1A20DF37 REST.GET.OBJECT ourbucket.name.config.txt "GET /ourbucket.name.config.txt HTTP/1.1" 200 - 325 325 16 16 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" -
格式定义如下:http://s3browser.com/amazon-s3-bucket-logging-server-access-logs.php
任何帮助将不胜感激!
编辑:响应 FailDev,输出应该是包含在两个方括号之间的任何字符串,例如[foo bar],两个引号,例如“foo bar”或空格,例如foo bar(其中 foo 和 bar 都将单独匹配。我已将示例行中的每个匹配项都分解为以下块中自己的行:
dd8d30dd085515d73b318a83f4946b26d49294a95030e4a7919de0ba6654c362
ourbucket.name.config
[31/Oct/2011:17:00:04 +0000]
184.191.213.218
-
013259AC1A20DF37
REST.GET.OBJECT
ourbucket.name.config.txt
"GET /ourbucket.name.config.txt HTTP/1.1"
200
-
325
325
16
16
"-"
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"
-
【问题讨论】:
-
输出到底应该是什么?
-
我不敢相信更多的人不需要这些信息!好问题,谢谢!