''' [ {
"id": "**49b18e99-7516-4c9a-8e1a-9d28f470512**",
"name": "名稱"。
"appId": "",
"publishTime": "2020-05-17",
"發布": true,
"流": {
"id": "aaec8d41-5201-43ab809f-3063750dffff",
"名稱": "名稱",
"權限": null
},
"sedInProductVersion": "12.0",
"migrationHash": "qewjhjkw-djqwhndj",
"availabilityStatus": 1,
"特權": null
}, {
"id": "**59b18e99-7516-4c9a-8e1a-9d28f4705123**",
"名稱": "名稱",
"appId": "",
"發布時間": "2020-05-17",
"發布": true,
"流": {
"id": "abec8d41-5201-43ab809f-3063750deeee",
"名稱": "名稱",
"權限": null
},
"sedInProductVersion": "12.0",
"migrationHash": "qewjhjkw-djqwhndj",
"availabilityStatus": 1,
"特權": null
}
] '''
我想要這個49b18e99-7516-4c9a-8e1a-9d28f470512和59b18e99-7516-4c9a-8e1a-9d28f4705123,但是使用"sed -n 's|.*"id":"([^"]*)".*|1|p'"
我得到的是
49b18e99-7516-4c9a-8e1a-9d28f470512,
aaec8d41-5201-43ab809f-3063750dffff,
59b18e99-7516-4c9a-8e1a-9d28f4705123,
abec8d41-5201-43ab809f-3063750deeee
如果檔案有多個json物件,就像上面給出的那樣。
那么請幫助我找到上述的最佳命令--只使用sed。
uj5u.com熱心網友回復:
使用任何POSIX awk:
awk '
/{ *$/ { depth }
/^ *}/ { depth-- }
(depth == 1) && sub(/^[[:space:]]*"id": *"/,") && sub(/", *$/, ")
'檔案
**49b18e99-7516-4c9a-8e1a-9d28f470512**
**59b18e99-7516-4c9a-8e1a-9d28f4705123**
uj5u.com熱心網友回復:
使用GNU awk和你顯示的樣本,請嘗試以下awk代碼。在GNU awk中撰寫和測驗。簡單的解釋是,將RS設定為 "id":[直到}的第一次出現。然后使用match函式,通過使用regex "id":[:space:]] "[^"]*來匹配OP需要的精確值,然后列印這些值。
awk -v RS='"id":[^}]*' '
match(RT,/"id":[[:space:]] "[^"]*/){
val=substr(RT,RSTART,RLENGTH)
sub(/.*"/,",val)
print val
}
' Input_file
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/318129.html
標籤:
下一篇:加入2個檔案,以第一個檔案為優先
