![](/img/trans.png)
[英]Unable to extract specific value of json file using sed in shell script
[英]How to extract a json object only using basic commands like sed/awk in shell?
像這樣:我有一個格式如下的 json 文件:
{
"Item": {
"summary": {
"B": "ABCDE"
},
"name": {
"S": "sider"
},
"age": {
"N": "1"
},
"data": {
"B": "abcde"
}
}
}
如何僅使用 sed/awk 等現有命令而不在 shell 中安裝任何外部工具來獲取對象“Item”?
預期輸出:
{
"summary": {
"B": "ABCDE"
},
"name": {
"S": "sider"
},
"age": {
"N": "1"
},
"data": {
"B": "abcde"
}
}
正如 chepner 所建議的那樣,您需要質疑您的約束條件。 在某些情況下,你被打得不好,必須處理它。 所以這是一個 sed 方法:
這是 awk 的修訂解決方案。 Sed 也被拋出以取消縮進:
awk '
/^ }/ { p = 0 ; print }
p == 1 { print }
/"Item": {/ { print " {" ; p = 1 }
' | sed 's/^ //'
最初發布此內容(但注意到輸出與您的期望不符):
sed -n '/^ "Item": {/,/^ }/p'
上面的 sed 方法假設 Item 是縮進的,就像你在上面的示例輸入中一樣。
這是使用我最喜歡的 jq 的方法:
jq '.Item'
您最好檢查一下您的機器上是否安裝了帶有 json 包的 python。 這是一個適合您需求的python3腳本:
#!/usr/bin/env python3
import json
import sys
j = json.load( sys.stdin )
print(json.dumps(j["Item"]))
按照慣例,使用諸如sed
/ awk
類的行感知工具來操作諸如JSON
類的嵌套數據格式是不正確的。 但是,如果您的選擇有限,那么最好的方法如下:
awk
/ sed
提取您的Item
這是一個基於sed
的解決方案:
bash $ <file.json tr '\n' ' ' | sed -E 's/^ *{ *"Item": +//; s/ *}$//'
這是你需要的:
sed -n '/^ "Item": {/,/^ }/{s/"Item": //;s/^ //;p}'
基本上建立在Mark的解決方案通過使兩個換人刪除"Item":
之前去縮進4個空格和p
打印。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.