首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何打印第三和第四双引号之间的内容

如何打印第三和第四双引号之间的内容
EN

Unix & Linux用户
提问于 2023-03-09 07:41:09
回答 3查看 74关注 0票数 0

我有一些来自Linux机器上的web服务的日志。日志看起来如下:

代码语言:javascript
运行
复制
{"log":"[2023-03-09T06:39:10.669Z] \"GET /server/prod?blank=true HTTP/1.1\" 200 - 0 874 1 1 \"-\" \"-\" \"aaad-bbb-ccc-dd-eeeee\" \"example.com:22213\" \"172.16.2.1:10080\"\n","stream":"stdout","time":"2023-03-09T06:39:11.935831787Z"}

如你所见,有一些双引号。我需要打印第三和第四双引号之间的内容,以及第十一和第十二双引号之间的内容。这意味着我想获得如下内容:

代码语言:javascript
运行
复制
"GET /server/prod?blank=true HTTP/1.1\"   "example.com:22213\"

我只关心里面的内容。我不关心"\

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2023-03-09 08:27:56

根据我的计算,您需要第四和第五个双引号之间的文本,然后是第十二和第十三双引号之间的文本:

代码语言:javascript
运行
复制
sed -E 's/^([^"]*"){4}([^"]*")([^"]*"){8}([^"]*").*$/"\2   "\3/'

(使用sed支持扩展正则表达式,如GNU、各种BSD或Busybox)或

代码语言:javascript
运行
复制
sed 's/^\([^"]*"\)\{4\}\([^"]*"\)\([^"]*"\)\{8\}\([^"]*"\).*$/"\2   "\3/'

(使用任何sed)。

票数 2
EN

Unix & Linux用户

发布于 2023-03-09 08:40:25

使用jq,您可以提取和解码log键的值:

代码语言:javascript
运行
复制
$ jq -r .log file
[2023-03-09T06:39:10.669Z] "GET /server/prod?blank=true HTTP/1.1" 200 - 0 874 1 1 "-" "-" "aaad-bbb-ccc-dd-eeeee" "example.com:22213" "172.16.2.1:10080"

这实际上是一个使用空格字符作为字段分隔符的无头CSV记录,因此我们可以使用CSV感知工具(如米勒 (mlr) )从这里解析出第二个和第12个字段:

代码语言:javascript
运行
复制
$ jq -r .log file | mlr --csv -N --fs space cut -f 2,12
"GET /server/prod?blank=true HTTP/1.1" example.com:22213

为了使解析更容易,您可能需要使用TSV输出格式:

代码语言:javascript
运行
复制
$ jq -r .log file | mlr --c2t -N --ifs space cut -f 2,12
GET /server/prod?blank=true HTTP/1.1    example.com:22213

米勒会自动删除引号,因为第一个字段不再包含嵌入式分隔符。

注意,--csv更改为--c2t (与--icsv--otsv相同),也从--fs更改为--ifs (只设置输入字段分隔符,而不是输出字段分隔符)。在这种情况下,将--fs space更改为--ifs space --ofs tab会产生与Miller对待TSV和CSV相同的效果(只是字段分隔符不同)。

票数 4
EN

Unix & Linux用户

发布于 2023-03-09 08:52:43

一个示例awk脚本可以完成这项工作。这使用"字符作为字段分隔符,因此第一个字段($1)是第一个"等之前的部分。

代码语言:javascript
运行
复制
awk -F\" '{print $5 " " $13}'

如果您也想删除反斜杠,可以在脚本中使用例如gsub()

代码语言:javascript
运行
复制
awk -F\" '{gsub(/\\/, ""); print $5 " " $13}'
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/739155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档