簡體   English   中英

從 shell 腳本 output 創建 json

[英]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過濾器在輸入上應用正則表達式,並將匹配項轉換為 object
  • from_entries過濾器將具有鍵/值條目的對象數組減少為一個 object
  • {Release, Codename} object 生成器通過僅過濾某些字段來創建 object
lsb_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM