gpt4 book ai didi

json - bash输出为json格式

转载 作者:太空宇宙 更新时间:2023-11-04 12:54:22 25 4
gpt4 key购买 nike

我是 Linux 和 Bash 脚本的新手。我正在尝试将 Ubuntu Linux 中的几个 bash 脚本输出为 JSON 格式,但是,我似乎无法让它正常工作。

我的目标是:

date -u +%Y-%m-%d:%H:%M:%S  //date and time

lsb_release -a //os distro version

ifconfig -a //ip info

转换为JSON格式:

  "datetime":datetime_string,

"osversion":string,

"ip_info: [{"interface":string,"ip_addr":string,"mask":string,"gateway":string},
{"interface":string,"ip_addr":string,"mask":string,"gateway":string}],

最佳答案

Bash 本身不支持 JSON。因此,为了保证一致性,您需要使用内置 JSON 解析和生成支持的外部实用程序。jq是其中之一,下面使用其内置的正则表达式支持:

jq --raw-input \
--arg date "$(date)" \
--arg osver "$(lsb_release -a)" \
'{"date": $date,
"osver": $osver,
"ip_info": [inputs |
capture("^[0-9]+: (?<ifname>[^[:space:]]+)[[:space:]]+inet (?<addr>[^[:space:]/]+)(/(?<masklen>[[:digit:]]+))?")
]
}' \
< <(ip -o addr list | grep 'inet ')

查看此代码的实际应用 on JQPlay .


如果您无法安装 Linux 发行版中未内置的工具,请考虑使用 Python:

#!/bin/bash
# ^^^^ - important, not /bin/sh; this uses some bash-only syntax

py_code=$(cat <<'EOF'
import json, re, sys

content={'ip_info': []}
for k, v in [ arg.split('=', 1) for arg in sys.argv[2:] if '=' in arg ]:
content[k]=v

ip_re = re.compile(r'^[0-9]+:\s+(?P<ifname>\S+)\s+inet (?P<addr>[^/\s]+)(?:/(?P<masklen>\d+))?')
for line in open(sys.argv[1]).readlines():
m = ip_re.match(line)
if not m: raise "NOOOO"
content['ip_info'].append({
'ifname': m.groups('ifname'),
'addr': m.groups('addr'),
'masklen': m.groups('masklen'),
})

print json.dumps(content)
EOF
)

python -c "$py_code" \
<(ip -o addr list | grep 'inet ') \
"date=$(date)" "osver=$(lsb_release -a)"

关于json - bash输出为json格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36209541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com