bash 输出为 json 格式

2024-02-03

我是 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 https://stedolan.github.io/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 ')

查看此代码的实际效果.


如果您无法安装 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)"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

bash 输出为 json 格式 的相关文章

  • 如何将 JSON 文本转换为 PHP 关联数组

    我将以下 JSON 对象存储在文本文件 data txt 中 player black time 0 from 2c to 3d 我使用 php 阅读 问题 有没有简单的方法可以转换 data到 PHP 关联数组 我尝试过使用json de
  • 安装 JDK 时出错:keytool 命令需要已安装的 proc fs (/proc)。 Linux 的 Windows 子系统

    我尝试在 Linux 的 Windows 子系统 Ubuntu 14 04 上安装 Oracle JDK 1 7 但出现以下错误 the keytool command requires a mounted proc fs proc Jav
  • 类型错误:JSON 对象必须是 str,而不是“字节”

    我有以下非常基本的代码会抛出 TypeError the JSON object must be str not bytes import requests import json url my url user my user pwd m
  • grep 彩色线条

    我编写了一个简单的 PHP shell 脚本 它解析文件并输出某些元素 它产生大量的输出 采用不同的 bash 颜色 绿色表示正常 黄色表示警告 红色表示错误等 在开发过程中我想过滤掉一些行 例如 所有包含红色文本的行 我可以使用grep
  • 我可以在 Ubuntu 上使用 Homebrew 吗?

    我只是尝试使用 Homebrew 和 Linuxbrew 在我的 Ubuntu 服务器上安装软件包 但都失败了 这就是我尝试安装它们的方法 sudo apt get install build essential curl git m4 r
  • 在 MacOS 上构建需要 net461 的 dotnet SDK 项目的最简单方法

    我有一个 dotnet SDK sln and a build proj with
  • 虚拟内存澄清——大连续内存的分配

    我有一个应用程序 我必须在 Windows 上分配 使用运算符 new 相当大的内存空间 数百 MB 该应用程序是 32 位 我们现在不使用 64 位 即使在 64 位系统上也是如此 我启用了 LARGEADDRESSAWARE 链接器选项
  • Xcode 方案预操作脚本未运行

    点击构建 构建日志中不会打印任何内容 是什么赋予了 Xcode 版本 8 2 1 8C1002 预操作发生在构建之前 因此输出不会进入构建日志 而是进入 stdErr 您可以将输出复制到文件中 exec gt PROJECT DIR pre
  • 如何在 Ubuntu/Linux 发行版中安装 Tesseract-OCR 3.03?

    我和一个朋友有兴趣为 CV 项目训练 tesseract OCR 引擎 我们尝试使用一些包装器 例如 PyTesser 和 pyocr 但结果目前不如我们需要的那么准确 因此 我们希望尝试训练超立方体以更好地实现我们的目的 即识别食品标签上
  • 如果文件修改日期早于 N 天

    此问题涉及在文件的修改日期早于这么多天时采取行动 我确信创建日期或访问日期会类似 但对于修改日期 如果我有 file path name to some file N 100 for example N is number of days
  • 如何解析多态 JSON 数组?

    我有一个 JSON 格式的文件 其中包含个人用户的记录 一些用户的记录中间有一个评论字段 我只想解析顶级项目 全名 贡献者姓名 电子邮件 使用 Newtonsoft JSON 解析器 但我似乎无法让它识别单个对象 当我将整个字符串解析为一个
  • BASH 中带有千位分隔符的数字格式

    我有一个号码12343423455 23353 我想用千位分隔符格式化数字 所以输出将是12 343 423 455 23353 printf 3f n 12345678 901 12 345 678 901
  • 在 Windows / Linux 中创建 Mac 包

    我自己努力制作一个 r 包 我按照 stackoverflow 中上一个问题的说明进行操作如何为外行开发软件包 http cran r project org bin windows Rtools 以下是我根据上一个问题采取的步骤 在新的
  • SIGHUP 用于重新加载配置

    根据signal 7 SIGHUP用于检测控制终端的挂起或控制进程的死亡 然而 我遇到过很多 OSS 守护进程 服务 其中SIGHUP用于启动配置的重新加载 这里有一些例子 hostapd sshd snort etc 这是实现重新加载的标
  • 进程如何知道它已收到信号

    如果我错了 请纠正我 以下是我对信号的理解 据我所知 信号生成 和信号传递有2个不同 事物 为了产生信号 操作系统只是在位数组中设置一个位 在过程控制中维护 工艺块 PCB 每一位 对应于特定信号 当设置一个位时 这意味着 该位对应的信号为
  • 将新属性动态添加到 Node 中现有的 JSON 数组中

    我需要添加当前 JSON 中不存在的属性 json 对象如下所示 var jsonObj result OK data 我想在 数据 中添加温度 我可以像下面那样做 jsonObj data push temperature 然后 我想在
  • 使用 Vala 和 GLib 的正则表达式

    有没有一个函数 比如http php net manual en function preg match all php http php net manual en function preg match all php 使用 GLibh
  • X 按键/释放事件捕获,与焦点窗口无关

    我想记录所有传入的按键事件 无论哪个窗口处于焦点状态或指针位于何处 我编写了一个示例代码 它应该捕获当前焦点窗口的按键事件 include
  • 气流:如何将读取 json 文件的方法放入本地库中

    我必须产生一些DAG 我已将 json 表架构文件保存在GCP铲斗 https cloud google com storage docs json api v1 buckets GCP 存储桶上的文件关联到composer将被重新映射到
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译

随机推荐

  • 如何获取当前键盘布局的代码页?

    我的非 Unicode 应用程序需要能够处理 Unicode 键盘输入 WM CHAR 等 从而接收 8 位字符代码 然后在内部将其转换为 Unicode 需要 9x 兼容性 因此不能选择使用大多数 Unicode API 目前 它查看 P
  • iOS FFT 绘制频谱

    我读过这些问题 使用 Apple FFT 和加速框架 https stackoverflow com questions 3398753 using the apple fft and accelerate framework 使用 Acc
  • 选择 Firefox 附加目录中的文件

    为了简单起见 我将基于 XUL 的 Firefox 插件转换为基于 SDK 的版本 我在基于 XUL 的版本中使用的 XPCOM 模块似乎可以工作 但 ci nsIFile 的行为不同 我不知道如何导航到当前位于目录最高层的 smartPr
  • ASP.NET MVC MultiSelectList 的选定值未正确选择

    我知道其他人也问过这个问题 但我对此完全困惑 这将显示未选择任何值的下拉列表 这将显示下拉列表 其中包含我在 Model items 中传递的值 这些值已正确选择 就像我所期望的那样
  • 使用 gdb 调试 C++11 右值引用

    我刚刚注意到我无法调试rvalue参考文献与gdb 7 7 1适当地 void simple int i 当我输入这个简约函数时 我无法获得任何有意义的信息i It s type and value are unknown to gdb s
  • 当我实现自定义 Lint 检测器时如何调试 java 源代码?

    我是一名 Android 开发者 我已经通过实现新的 XXXDetector 和 XXXIssueRegistry 设计了自己的 lint 规则 这是我的源代码片段 我的 XXXIssueRegistry 文件 public class M
  • 关闭 Windows 8 超级按钮栏

    我有一台 Surface Pro 我需要将其 锁定 为一种 Kiosk 模式 我知道 信息亭模式 的更新正在进行中 但是我需要在此之前执行此操作 我在互联网上进行了搜索 但似乎您无法通过滑动来禁用超级按钮栏screen 我找到了禁用触控板的
  • C 静态库的包装

    我有一个用于相机的 C 静态库 现在计划为 Windows 8 开发 C WPF UI 它将使用 C 静态库来捕获视频 音频 我的想法是 C Static 会有 C CLI 包装器 包装器将是托管 Dll C WPF UI 将使用此 Dll
  • 在克隆期间更改内部元素 id

    我正在单击按钮时克隆 DIV 元素 我可以更改正在克隆的 DIV 元素的 ID 值 但是是否可以更改内部元素的 id 在下面的代码中 我更改了 Id selection克隆时 我需要动态更改 id select div div class
  • 使用 Spring RestTemplate 访问 Https Rest 服务

    谁能给我提供一个代码示例来使用 Spring Rest 模板访问通过 HTTPS 保护的其余服务 URL 我有证书 用户名和密码 基本身份验证用于服务器端 我想创建一个可以使用提供的证书 用户名和密码 如果需要 连接到该服务器的客户端 Ke
  • 头部内有多个 RSS 链接标签,标记是否有效?

    在 RSS feed 中包含多个 RSS feed 是否有效 tag 我的意思是 标签如下 etc 我们有一小部分 总共五个 RSS 提要 我们已经拥有了一段时间 但只在头标签中包含了 主要 提要 可以将它们全部包括在内吗 是的 这是完全有
  • jquery UI - 将日期添加到选定日期

    这看起来很简单 但我无法解决它 我真的需要这个 如何通过 SelectedDate 事件将日期添加到选定日期 我需要对 2 个日期选择器执行日期范围限制 一旦用户设置了一个日期选择器 另一个日期选择器只需要允许日期等于第一个日期选择器的所选
  • WHERE 子句中的动态条件

    我有一个存储过程 想知道是否可以建立一个动态的where基于参数的条件 假设我有这个查询 SELECT FROM tbl Users 现在 我有一个名为 username 我想用它来建立一个动态的where条件 通过我的程序可能是 1 个或
  • 从文件读取/写入 std::unordered_map 的更快方法

    我正在与一些非常大的公司合作std unordered maps 数亿个条目 并且需要将它们保存到文件中或从文件中加载它们 我目前执行此操作的方法是迭代映射并一次读取 写入每个键和值对 std unordered map
  • 增加 Linux 中 TCP/IP 连接的最大数量

    我正在对服务器进行编程 似乎我的连接数量受到限制 因为即使我将连接数量设置为 无限 我的带宽也没有饱和 如何增加或消除 Ubuntu Linux 机器一次可以打开的最大连接数 操作系统是否限制了这一点 或者是路由器或ISP 或者是别的什么
  • 火鸟远程备份

    我想备份 firebird 数据库 我正在使用 gbak exe 实用程序 效果很好 但是 当我想从远程计算机进行备份时 备份文件存储在服务器文件系统上 有没有办法强制 gbak 实用程序下载备份文件 Thanks 备份存储在 Firebi
  • chrome:为什么 css 3d 对变换比例 < 0 的大元素进行变换会导致白屏错误?

    我遇到了屏幕区域在镀铬中变白的问题 下面是一个简化的测试用例 从测试来看 可以肯定的是 变换缩放和旋转的组合导致了该问题 为了用少量 html 元素重现该问题 我夸大了情况并使用了按比例缩小 0 125 的 5000px 正方形 请注意 只
  • Angular 2 单元测试:找不到名称“描述”

    我正在跟进本教程来自 angular io https angular io docs ts latest guide testing html jasmine 101 正如他们所说 我创建了 Hero spec ts 文件来创建单元测试
  • -XX:-PrintGC 和 XX:-PrintGCDetails 标志有什么作用?

    我找到了 JVM 标志here http java sun com javase technologies hotspot vmoptions jsp 有没有更详细的解释他们到底做什么 设置此标志会将 JVM 进行的所有垃圾收集写入日志文件
  • bash 输出为 json 格式

    我是 Linux 和 Bash 脚本新手 我正在尝试将 Ubuntu Linux 中的几个 bash 脚本输出为 JSON 格式 但是 我似乎无法让它正常工作 我的目标是得到这个 date u Y m d H M S date and ti