Phi*_*ide 6 text-processing json jq
我已经编写了一个转换为 json的脚本,nmcli --mode multiline dev wifi
但我发现它不一致(当结果有空格时会中断)、很长且难以阅读。
我想知道是否可以将结果直接传送到jq
. 输出看起来像:
*:
SSID: VIDEOTRON2255
MODE: Infra
CHAN: 11
RATE: 54 Mbit/s
SIGNAL: 69
BARS: ???_
SECURITY: WPA1 WPA2
*: *
SSID: VIDEOTRON2947
MODE: Infra
CHAN: 6
RATE: 54 Mbit/s
SIGNAL: 49
BARS: ??__
SECURITY: WPA1 WPA2
Run Code Online (Sandbox Code Playgroud)
我正在寻找生成这样的东西:
[{
"network": "VIDEOTRON2255",
"mode": "Infra",
"chan": "11",
"rate": "54 Mbit/s",
"signal": "69",
"bars": "???_",
"security": "WPA1 WPA2"
},
{
"network": "VIDEOTRON2947",
"mode": "Infra",
"chan": "6",
"rate": "54 Mbit/s",
"signal": "49",
"bars": "??__",
"security": "WPA1 WPA2"
}]
Run Code Online (Sandbox Code Playgroud)
是的,我之前确实问过一个相关的问题。这是我根据Gilles answer编写的第一个脚本,它适用于某些值,但不适用于或有空格的值。security
rate
您链接到的脚本效率极低-您正在执行大量无用的预处理...在模式中
使用nmcli
,--terse
因为根据手册,“此模式是专为计算机(脚本)处理而设计的”,请指定所需的字段并将输出通过管道传输到jq -sR
例如
printf '%s' "$(nmcli -f ssid,mode,chan,rate,signal,bars,security -t dev wifi)" | \
jq -sR 'split("\n") | map(split(":")) | map({"network": .[0],
"mode": .[1],
"channel": .[2],
"rate": .[3],
"signal": .[4],
"bars": .[5],
"security": .[6]})'
Run Code Online (Sandbox Code Playgroud)