如果你有一個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無效。 –