我有这样的json:
{"time_stamp":1397718404043,"request_id":"123456"}
我想提取request_id并将其放在一行的开头。例如:
123456 {"time_stamp":1397718404043,"request_id":"123456"}
我可以使用sed或其他unix工具吗?怎么样?
答案 0 :(得分:4)
这将从您发布的示例输入中生成您发布的所需输出:
$ sed 's/\(.*"\([^"]*\)".*\)/\2 \1/' file
123456 {"time_stamp":1397718404043,"request_id":"123456"}
如果您的实际输入并非始终遵循您发布的格式,请使用更多信息和其他示例更新您的问题。
答案 1 :(得分:3)
您可以使用jq
echo '{"time_stamp":1397718404043,"request_id":"123456"}'|./jq ".request_id"
输出是:
"123456"
请参阅此页:http://stedolan.github.io/jq/manual/
更新
k='{"time_stamp":1397718404043,"request_id":"123456"}'
printf "%s %s\n" $(echo $k|./jq ".request_id"|tr -d \") $k
答案 2 :(得分:2)
使用perl的另一种解决方案:
s='{"time_stamp":1397718404043,"request_id":"123456"}'
echo $s | perl -pe 'print /(\d+)"}/ , " "'
123456 {"time_stamp":1397718404043,"request_id":"123456"}
答案 3 :(得分:1)
使用awk(不是专用的json解析器):
s='{"time_stamp":1397718404043,"request_id":"123456"}'
awk -F '"request_id" *: *"' '{p=$0; sub(/".*$/, "", $2); print $2, p}' <<< "$s"
123456 {"time_stamp":1397718404043,"request_id":"123456"}
答案 4 :(得分:0)
只是一个简单的提取:
awk -F\" '{print $(NF-1),$0}'
echo '{"time_stamp":1397718404043,"request_id":"123456"}' | awk -F\" '{print $(NF-1),$0}'
123456 {"time_stamp":1397718404043,"request_id":"123456"}
或者只是:
awk -F\" '$0=$(NF-1)OFS$0'
答案 5 :(得分:0)
击:
json='{"time_stamp":1397718404043,"request_id":"123456"}'
{
[[ $json =~ '"request_id":"'([^\"]+) ]] && echo -n "${BASH_REMATCH[1]} "
echo "$json"
}
123456 {"time_stamp":1397718404043,"request_id":"123456"}