[英]Create json from shell script output
我有一個 shell 腳本 version.sh,其中我有類似的代碼。
#!/bin/sh
data = `lsb_release -a`
echo $data
它返回給我 output,如下所示:
Distributor ID: Ubuntu
Description: Ubuntu 20.04.3 LTS
Release: 20.04
Codename: focal
所以我真正想要的是要創建一個 JSON 文件。數據應該像
{'Release' : 20.04 , 'Codename' : focal}
我想打印 JSON 表格中的數據。有人可以幫我解決這個問題嗎?? 我被困在這里。任何幫助的建議都很重要。
您可以使用 python ttp 模塊來獲取此數據。 請參閱以下示例:
from ttp import ttp
import json
data_to_parse = """
Distributor ID: Ubuntu
Description: Ubuntu 20.04.3 LTS
Release: 20.04
Codename: focal
"""
ttp_template = """
Release: {{release}}
Codename: {{codename}}
"""
parser = ttp(data=data_to_parse, template=ttp_template)
parser.parse()
# print result in JSON format
results = parser.result(format='json')[0]
#print(results)
#converting str to json.
result = json.loads(results)
print(result)
見output:
按要求編輯(不使用任何包):
data_to_parse = """
Distributor ID: Ubuntu
Description: Ubuntu 20.04.3 LTS
Release: 20.04
Codename: focal
"""
lines = data_to_parse.splitlines()
result = {}
for line in lines:
if 'Release:' in line:
line2 = line.split(':')
result['Release'] = (line2[1].strip())
elif 'Codename:' in line:
line2 = line.split(':')
result['Codename'] = (line2[1].strip())
print(result)
查看結果:
編輯2.時間:
新數據:
data_to_parse = """
Distributor ID: Ubuntu
Description: Ubuntu 20.04.3 LTS
Release: 20.04
Codename: focal
Distributor ID: Ubuntu
Description: Ubuntu 20.04.3 LTS
Release: 22.04
Codename: local
Distributor ID: Ubuntu
Description: Ubuntu 20.04.3 LTS
Release: 21.04
Codename: cocal
"""
代碼:
lines = data_to_parse.splitlines()
result_list = []
result2 = {}
result_list3 = []
for line in lines:
if 'Release:' in line:
line2 = line.split(':')
result_list.append({'Release': line2[1].strip()})
elif 'Codename:' in line:
line2 = line.split(':')
result_list.append({'Codename': line2[1].strip()})
result2 = {**result_list[0], **result_list[1]}
result_list3.append(result2)
result_list = []
print(result_list3)
output:
沒有標記或詢問,但jq通常是生成和/或操作 shell 中的shell
數據的最佳選擇(它確實被標記,連同bash
),這里是使用jq
的解決方案的樣子:
-R
選項使輸入行被解釋為原始字符串-n
選項使inputs
關鍵字代表所有輸入行的迭代器[inputs | …]
[inputs | …]
數組生成器創建一個數組,每個輸入行包含一個項目capture
過濾器在輸入上應用正則表達式,並將匹配項轉換為 objectfrom_entries
過濾器將具有鍵/值條目的對象數組減少為一個 object{Release, Codename}
object 生成器通過僅過濾某些字段來創建 objectlsb_release -a | jq -Rn '
[ inputs | capture("(?<key>.*):\\s+(?<value>.*)") ]
| from_entries | {Release, Codename}
'
{
"Release": "20.04",
"Codename": "focal"
}
如果需要,添加-c
選項會將 output 變成一行:
lsb_release -a | jq -Rnc '…'
{"Release":"20.04","Codename":"focal"}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.