Bash 脚本中解析 INI 文件

在 Bash 脚本中解析 INI 文件可能稍显复杂,因为 Bash 本身并未内置专门用于处理此类配置文件的工具。然而,我们可以通过一些文本处理命令(例如 grepsedawk)或借助外部工具(如 python 脚本或 inih 库)来解析 INI 文件。

以下是一个简单的 Bash 脚本示例,用于解析结构相对简单的 INI 文件。但请注意,这个脚本并不具备处理嵌套节(section)或复杂值(例如包含引号、换行符或特殊字符的值)的能力。

示例 INI 文件(config.ini)

[Section1]
key1=value1
key2=value2 with spaces[Section2]
keyA=123
keyB=456

Bash 解析脚本

#!/bin/bash# 指定 INI 文件路径
ini_file="config.ini"# 定义函数,用于解析 INI 文件并返回指定节和键的值
get_ini_value() {local section="$1"local key="$2"local value=$(grep -A 1000 "^\[$section\]" "$ini_file" | grep "^$key=" | cut -d '=' -f 2)# 去除值两侧的空白字符(包括空格和换行符)value=$(echo -e "$value" | xargs)echo "$value"
}# 示例:获取 Section1 中 key1 的值
value1=$(get_ini_value "Section1" "key1")
echo "Section1 key1: $value1"# 示例:获取 Section2 中 keyB 的值
value2=$(get_ini_value "Section2" "keyB")
echo "Section2 keyB: $value2"

脚本说明

  1. ini_file:指定 INI 文件的路径。
  2. get_ini_value 函数
    • 接收两个参数:节名称($section)和键名称($key)。
    • 使用 grep 查找 INI 文件中与指定节相匹配的部分(-A 1000 选项确保能够捕获该节下的所有键,尽管这是一个相对粗暴的方法)。
    • 再次使用 grep 查找与指定键相匹配的行。
    • 使用 cut 命令以等号(=)为分隔符,提取键的值。
    • 使用 xargs 去除值两侧的空白字符(这是一个小技巧,用于处理包含空格的值)。
  3. 示例调用:展示如何调用 get_ini_value 函数以获取特定节和键的值。

注意事项

  • 上述脚本在处理包含特殊字符(例如引号、换行符等)的值时可能表现不佳。
  • 如果 INI 文件结构复杂(例如包含嵌套节),该脚本可能无法正确解析。
  • -A 1000 是一个相对粗暴的解决方案,用于确保捕获所有可能的键。对于大型 INI 文件,这可能导致性能问题。在实际应用中,应根据 INI 文件的大小和结构调整此值。
  • 如果需要处理更复杂的 INI 文件,建议使用更强大的脚本语言(如 Python)或专门的 INI 解析库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/56038.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM的旅游网站【附源码】

基于SSM的旅游网站(源码L文说明文档) 目录 4 系统设计 4.1 系统概要设计 4.2 系统功能结构设计 4.3 数据库设计 4.3.1 数据库E-R图设计 4.3.2 数据库表结构设计 5 系统实现 5.1 管理员功能介绍 5.1.1 用户管理 5.1.2 …

每天五分钟深度学习pytorch:基于pytorch搭建多项式线性回归模型

本文重点 我们前面学习了基于pytoch搭建一元线性回归模型,本文我们学习使用pytorch搭建多项式的回归模型,在学习这个之前我们需要了解一下什么是多项式回归模型? 多项式回归模型和多变量(多特征)的回归模型是不一样的,多变量就是一个样本有多个特征属性,而多项式就是一…

云原生化 - 工具镜像(完整版)

在微服务和云原生环境中,容器化的目标之一是尽可能保持镜像小型化以提高启动速度和减少安全风险。然而,在实际操作中,有时候需要临时引入一些工具来进行调试、监控或问题排查。Kubernetes提供了临时容器(ephemeral containers)的功能,允许在不改变原始容器镜像的情况下,…

Centos7 搭建logstash

下载并安装公共签名密钥: sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch 创建一个名为 /etc/yum.repos.d/logstash.repo 的文件,并添加以下内容: [logstash-7.x] nameElastic repository for 7.x packages baseu…

【进阶】面向对象之权限修饰符代码块

文章目录 权限修饰符权限修饰符的使用规则 代码块分类局部代码块(了解就行)构造代码块(了解就行)静态代码块(重点) 权限修饰符 权限修饰符的使用规则 成员变量私有方法公开 特例: 如果方法中的代码是抽取其他方法中共性代码,这个方法一般也私有. 代码…

如何“半路出家”转行算法工程师的?

01 关于择业考虑 算法岗是什么? 算法岗,从根本内容上来说,是算法,算力,数据,应用场景的交集。从工作要求的角度来讲,是你的能力能够匹配大厂需要的工作要求。从个人角度来说,是你…

Gitea 忘记密码解决方案

一、在 Windows 上处理 Gitea 密码问题 1. 打开命令提示符: 以管理员身份运行命令提示符 2. 导航到 Gitea 安装目录: 假设你在 C:\gitea 下安装了 Gitea,使用以下命令导航到 Gitea 目录: cd C:\gitea 3. 重置密码&#xff1…

网易博客旧文----bacnet学习系列之三----读取属性程序的分析

bacnet学习系列之三----读取属性程序的分析 2014-01-21 16:29:42| 分类: BACnet | 标签: |举报 |字号大中小 订阅 先上一张自己画的流程图 bacnet学习系列之三----读取属性程序的分析 - xzhoumin - MMZHOU的博客 程序一开始就是分析命令行,…

hbuilderx+uniapp+Android健身房管理系统 微信小程序z488g

目录 项目介绍支持以下技术栈:具体实现截图HBuilderXuniappmysql数据库与主流编程语言java类核心代码部分展示登录的业务流程的顺序是:数据库设计性能分析操作可行性技术可行性系统安全性数据完整性软件测试详细视频演示源码获取方式 项目介绍 用户功能…

【React】如何对组件加载进行优化

1. 懒加载 (Lazy Loading) 使用 React.lazy() 和 Suspense 来实现懒加载(按需加载)组件。只有在需要时才加载对应组件,可以减小初始加载的体积。 const LazyComponent React.lazy(() > import(./LazyComponent));function App() {retur…

初级网络工程师之从入门到入狱(五)

本文是我在学习过程中记录学习的点点滴滴,目的是为了学完之后巩固一下顺便也和大家分享一下,日后忘记了也可以方便快速的复习。 网络工程师从入门到入狱 前言一、链路聚合1.1、手动进行链路聚合1.1.1、 拓扑图:1.1.2、 LSW11.1.3、 LSW2 1.2、…

RabbitMQ(学习前言)

目录 学习MQ之前有必要先去温故下微服务知识体系,以加深本章节的理解 一、微服务间的通讯方式 1. 基本介绍 2. 同步通讯 2.1. 什么是同步通讯 2.2. 同步通讯存在的问题 问题一:耦合度高 问题二:性能和吞吐能力下降 问题三&#xff1a…

SpringMVC源码-处理器适配器HandlerAdapter

因为定义controller的方式有三种,每种不同的方式调用的方法不同,尤其是注解修饰的 方法名是自定义的 因此需要通过适配器模式来调用方法执行 initStrategies进行适配器的初始化 处理器适配器一共有如下四种: org.springframework.web.servlet.Handl…

数据结构与算法——Java实现 32.堆

人的想法和感受是会随着时间的认知改变而改变, 原来你笃定不会变的事,也会在最后一刻变得释然 —— 24.10.10 堆 堆是基于二叉树实现的数据结构 大顶堆每个分支的上一个节点的权值要大于它的孩子节点 小顶堆每个分支的上一个节点的权值要小于它的孩子…

开源催生开源:Tesla 如何加速 AI 发展

特斯拉最近宣布开源其特斯拉以太网传输协议 (TTPoE),这是一种尖端网络结构,专为 AI/ML 数据中心环境中的高速、低延迟数据传输而设计,从而掀起了波澜。此举反映了特斯拉利用开源战略加速全行业进步的更广泛历史&#x…

Spring Boot课程问答:技术难题轻松解决

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原理…

Spring Security(常见过滤器介绍)

Spring Security是一个基于Spring框架的安全性解决方案,为Java应用程序提供了一套全面的安全解决方案。 一、概述 Spring Security是Spring采用AOP(面向切面编程)思想,基于servlet过滤器实现的安全框架。它致力于保护基于Spring的…

基于pytorch的手写数字识别-训练+使用

import pandas as pd import numpy as np import torch import matplotlib import matplotlib.pyplot as plt from torch.utils.data import TensorDataset, DataLoadermatplotlib.use(tkAgg)# 设置图形配置 config {"font.family": serif,"mathtext.fontset&q…

洗衣店订单管理:Spring Boot技术革新

3系统分析 3.1可行性分析 通过对本洗衣店订单管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本洗衣店订单管理系统采用JAVA作为开发语言,S…

CSS 鼠标悬停时让父元素和子元素以不同的方式进行变换

要在鼠标悬停时让父元素和子元素以不同的方式进行变换&#xff08;transform&#xff09;&#xff0c;可以分别设置它们的 transform 属性&#xff0c;并使用 transition 来实现平滑的效果。以下是一个示例&#xff0c;展示了如何实现这一效果。 HTML 结构 <!DOCTYPE html…