如果你有一个grep的,可以做的Perl兼容的正则表达式(PCRE):
$ grep -Po '"id": *\K"[^"]*"' infile.json
"4dCYd4W9i6gHQHvd"
-P
使PCRE
-o
保留只是比赛
"id": *
场比赛"id"
和空间任意量
\K
扔掉一切都在它的左边(“可变大小正向后看”)
"[^"]*"
两个单引号和所有的人
之间的非报价匹配如果你的grep无法做到这一点,你一个使用
$ grep -o '"id": *"[^"]*"' infile.json | grep -o '"[^"]*"$'
"4dCYd4W9i6gHQHvd"
这使用grep两次。第一个命令的结果是"id": "4dCYd4W9i6gHQHvd"
;第二个命令删除除了一对引号和它们之间的非引号之外的所有内容,并将其固定在字符串的末尾($
)。
但是,正如指出的那样,你不应该使用grep这一点,但一个工具,可以解析JSON –例如jq:
$ jq '.data.id' infile.json
"4dCYd4W9i6gHQHvd"
这仅仅是在该id
键一个简单的过滤器data
对象。
JQ还可以整齐漂亮打印JSON:
$ jq . infile.json
{
"data": {
"name": "test",
"id": "4dCYd4W9i6gHQHvd",
"domains": [
"www.test.domain.com",
"test.domain.com"
],
"serverid": "bbBdbbHF8PajW221",
"ssl": null,
"runtime": "php5.6",
"sysuserid": "4gm4K3lUerbSPfxz",
"datecreated": 1474597357
},
"actionid": "WXVAAHQDCSILMYTV"
}
这可能会帮助您:http://stackoverflow.com/questions/1955505/parsing-json-with-unix-tools – deathyr
尝试'grep的 - o -P'“id”:。*?“,'json.file | sed's /”\ |,// g''应该可以帮助你......但是如果你想要了解一些json工具。 –
@Stark [不要在问题正文中使用标记标记](http://meta.stackexchange.com/q/114860/250916),[不要使用内联代码跨度来强调](http:// meta .stackexchange.com/q/135112/250916),并且该问题显示为“单行JSON”,因此打印出来没有任何意义。你还添加了一个额外的'}',使JSON无效。 –