0

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

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

{"expires": "Thu, 11 Oct 2012 11:30:29 +0000", "upload_id": "hhgJHflih753jDhhod", "offset": 293876}

这是用于获取“offset”值的 sed 命令,该值适用于 busybox:

sed -n -e 's/.*"offset":\s*\([^}]*\).*/\1/p'

这是获取upload_id 的命令,它在BusyBox 上不起作用:

sed -n -e 's/.*"upload_id":\s*"*\([^"]*\)"*.*/\1/p'

如果有人可以帮助我使用简约的 sed 在 BusyBox 上获取“upload_id”,我将非常感激。谢谢!

4

3 回答 3

0

一种使用方式awk

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

结果:

hhgJHflih753jDhhod

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

于 2012-10-10T12:22:11.893 回答
0

使用cut

$ # 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

$ echo '{"expires": "Thu, 11 Oct 2012 11:30:29 +0000", "upload_id": "hhgJHflih753jDhhod", "offset": 293876}' |\
gawk -F'"' '{print $8}'       
hhgJHflih753jDhhod
于 2012-10-10T12:15:17.570 回答
0

grep:

grep -Po '(?<=upload_id": ")[^"]*' 

赛德:

sed -r 's/.*upload_id": "([^"]*).*/\1/'
于 2012-10-10T12:37:14.653 回答