首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简约的“sed”应该像“常规”sed一样执行。需要帮助解析

简约的“sed”应该像“常规”sed一样执行。需要帮助解析
EN

Stack Overflow用户
提问于 2012-10-10 20:10:15
回答 3查看 55关注 0票数 0

我正在使用一个解析JSON的脚本。我知道,我知道,你永远不应该这么做。但该脚本大量使用了它。这就是它遇到麻烦的原因。我在BusyBox上使用它,这里只有一个极简版的sed。

THis是它遇到麻烦的地方。这是JSON输出:

代码语言:javascript
复制
{"expires": "Thu, 11 Oct 2012 11:30:29 +0000", "upload_id": "hhgJHflih753jDhhod", "offset": 293876}

这是sed命令,用于获取busybox上的"offset“的值:

代码语言:javascript
复制
sed -n -e 's/.*"offset":\s*\([^}]*\).*/\1/p'

以下是获取upload_id的命令,该命令在BusyBox上不起作用:

代码语言:javascript
复制
sed -n -e 's/.*"upload_id":\s*"*\([^"]*\)"*.*/\1/p'

如果有人能帮我把"upload_id“用极简主义的sed放到BusyBox上,我会非常感激。谢谢!

EN

回答 3

Stack Overflow用户

发布于 2012-10-10 20:15:18

使用cut

代码语言:javascript
复制
$ # get upload_id
$ echo '{"expires": "Thu, 11 Oct 2012 11:30:29 +0000", "upload_id": "hhgJHflih753jDhhod", "offset": 293876}' |\
cut -d'"' -f8
hhgJHflih753jDhhod
$ # get offset
$ echo '{"expires": "Thu, 11 Oct 2012 11:30:29 +0000", "upload_id": "hhgJHflih753jDhhod", "offset": 293876}' |\
cut -d':' -f6 | cut -d' ' -f2 | cut -d'}' -f1
293876

这是它所能达到的最低限度。

编辑:

使用gawk

代码语言:javascript
复制
$ echo '{"expires": "Thu, 11 Oct 2012 11:30:29 +0000", "upload_id": "hhgJHflih753jDhhod", "offset": 293876}' |\
gawk -F'"' '{print $8}'       
hhgJHflih753jDhhod
票数 0
EN

Stack Overflow用户

发布于 2012-10-10 20:22:12

使用awk的一种方式

代码语言:javascript
复制
awk -F "[:,]" '{ for (i=1; i<=NF; i++) if ($i ~ /upload_id/) { gsub(/[" {}]/,"",$(i+1)); print $(i+1) } }' file.txt

结果:

代码语言:javascript
复制
hhgJHflih753jDhhod

请注意,这将适用于offsetupload_id字段,但不适用于expires字段。HTH。

票数 0
EN

Stack Overflow用户

发布于 2012-10-10 20:37:15

grep:

代码语言:javascript
复制
grep -Po '(?<=upload_id": ")[^"]*' 

sed:

代码语言:javascript
复制
sed -r 's/.*upload_id": "([^"]*).*/\1/'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12819023

复制
相关文章

相似问题

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