我正在使用一个解析JSON的脚本。我知道,我知道,你永远不应该这么做。但该脚本大量使用了它。这就是它遇到麻烦的原因。我在BusyBox上使用它,这里只有一个极简版的sed。
THis是它遇到麻烦的地方。这是JSON输出:
{"expires": "Thu, 11 Oct 2012 11:30:29 +0000", "upload_id": "hhgJHflih753jDhhod", "offset": 293876}这是sed命令,用于获取busybox上的"offset“的值:
sed -n -e 's/.*"offset":\s*\([^}]*\).*/\1/p'以下是获取upload_id的命令,该命令在BusyBox上不起作用:
sed -n -e 's/.*"upload_id":\s*"*\([^"]*\)"*.*/\1/p'如果有人能帮我把"upload_id“用极简主义的sed放到BusyBox上,我会非常感激。谢谢!
发布于 2012-10-10 20:15:18
使用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-10 20:22:12
使用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。
发布于 2012-10-10 20:37:15
grep:
grep -Po '(?<=upload_id": ")[^"]*' sed:
sed -r 's/.*upload_id": "([^"]*).*/\1/'https://stackoverflow.com/questions/12819023
复制相似问题