我正在使用解析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'
我真的很感激,如果有人可以帮助我让它工作以获得" upload_id"在带有简约sed的BusyBox上。 谢谢!
答案 0 :(得分: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
答案 1 :(得分:0)
使用awk
的一种方式:
awk -F "[:,]" '{ for (i=1; i<=NF; i++) if ($i ~ /upload_id/) { gsub(/[" {}]/,"",$(i+1)); print $(i+1) } }' file.txt
结果:
hhgJHflih753jDhhod
请注意,这适用于offset
和upload_id
字段,但不适用于expires
字段。 HTH。
答案 2 :(得分:0)
的grep:
grep -Po '(?<=upload_id": ")[^"]*'
sed的:
sed -r 's/.*upload_id": "([^"]*).*/\1/'