提取单词并将其放在一行的开头

时间:2014-04-29 14:15:04

标签: regex linux awk sed

我有这样的json:

{"time_stamp":1397718404043,"request_id":"123456"}

我想提取request_id并将其放在一行的开头。例如:

123456 {"time_stamp":1397718404043,"request_id":"123456"}

我可以使用sed或其他unix工具吗?怎么样?

6 个答案:

答案 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"}