首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对Bash输出进行排序并将其保存到sql db

如何对Bash输出进行排序并将其保存到sql db
EN

Stack Overflow用户
提问于 2021-02-17 06:49:50
回答 1查看 61关注 0票数 1

我一直试图从这个命令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循环“,我到现在还不知道如何继续

代码语言:javascript
复制
batstat=$(ioreg -r -c "AppleSmartBattery")
for i in ${batstat[@]}; do
sed 's/^[^{]*{\([^{}]*\)}.*/\1/' $i
echo $i
done

我需要完成以下工作

  1. 每次for通过行时,在引号“out”中获取一个值
  2. 将等于符号后的正确值赋值给相应的引用值

谢谢:)

EN

回答 1

Stack Overflow用户

发布于 2021-02-17 08:13:15

这并不是不可能的,但当有更简单的解决方案可用时,我认为完全在shell脚本中完成这个任务有点困难。

这里我要做的是将输出转换为JSON,然后使用一个节点模块(如JSON to-SQL )从JSON模式生成表,并使用JSON-SQL将输出转换为INSERT语句,然后您可以将其用于任何Node客户端,比如sql-客户端

您可能还可以在Node中使用像sh这样的模块来更干净、更容易地解析输出,以捕获ioreg命令输出,但下面是将命令输出转换为有效JSON的方法。

代码语言:javascript
复制
#!/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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66237001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档