我一直试图从这个命令ioreg -r -c "AppleSmartBattery"中获取数据,并将每个输入保存到sql中
$ ioreg -r -c "AppleSmartBattery“ +-o AppleSmartBattery { "TimeRemaining“= 179 "AvgTimeToEmpty“= 179 "AdapterDetails“= {"FamilyCode"=0} "ChargingOverride“=0 "AppleRawCurrentCapacity“= 2373 "InstantTimeToEmpty“=154个 "AppleRawMaxCapacity“= 3811 "ExternalChargeCapable“=否
我需要将它保存到一个sql表中,其中一个列是"*“,下一个列是相等之后的值。
我试着构建一个"for循环“,我到现在还不知道如何继续
batstat=$(ioreg -r -c "AppleSmartBattery")
for i in ${batstat[@]}; do
sed 's/^[^{]*{\([^{}]*\)}.*/\1/' $i
echo $i
done我需要完成以下工作
谢谢:)
发布于 2021-02-17 08:13:15
这并不是不可能的,但当有更简单的解决方案可用时,我认为完全在shell脚本中完成这个任务有点困难。
这里我要做的是将输出转换为JSON,然后使用一个节点模块(如JSON to-SQL )从JSON模式生成表,并使用JSON-SQL将输出转换为INSERT语句,然后您可以将其用于任何Node客户端,比如sql-客户端。
您可能还可以在Node中使用像sh这样的模块来更干净、更容易地解析输出,以捕获ioreg命令输出,但下面是将命令输出转换为有效JSON的方法。
#!/bin/bash
function parseData() {
tail -n +2 $1 | \
sed -re 's/\=/\:/g' | \
sed -re 's/</\"/g' | \
sed -re 's/>/\"/g' | \
sed -re 's/No/false/g' | \
sed -re 's/Yes/true/g' | \
sed -re 's/\(/\[/g' | \
sed -re 's/\)/\]/g' | \
sed '$d' | \
sed '$d' | \
sed 's/$/,/' | \
sed '1 s/\,//' | \
sed '$ s/\,//' | \
sed '52 s/,//'
}
ioreg -r -c "AppleSmartBattery" | parseData唯一的问题是,如果输出中的行数发生变化,则需要更新parseData函数最后一行中的parseData。
https://stackoverflow.com/questions/66237001
复制相似问题