文档章节

在Linux下使用awk解析ini文件的方法

t
 tommwq
发布于 2019/08/12 22:36
字数 454
阅读 20
收藏 0

1 ini文件

ini文件是一些软件用来保存配置信息的文本文件。ini文件的优点是简单和灵活,缺点是没有统一的标准。

下面来看一个ini文件内容示例::

[Master]
Arguments = -log master.log
LogLevel = 3
[Client]
Arguments = -log client.log
LogLevel = 1

从这里可以看到,ini文件的内容可以根据[Master]、[Client]分为不同的部分,每个部分包含了一组键值对。我们可以对ini文件进行简单的建模:

  1. ini文件是一个文本文件,由一组域组成。
  2. 域由域名字和一系列键值对组成。域名字和每个键值对,分别占一行。
  3. 域名所在行的格式为“[域名字]”。
  4. 域中键值对所在行的格式为“键=值”。

基于这个模型就可以对ini文件进行解析。

2 awk程序

下面的程序遍历ini文件的每一行,将读取到的键值对以 “export scope_name=value” 的格式输出。

# ini2env.awk
function ltrim(s) { sub(/^[ \t\r\n]+/, "", s); return s }
function rtrim(s) { sub(/[ \t\r\n]+$/, "", s); return s }
function trim(s) { return rtrim(ltrim(s)); }

BEGIN{scope="";} {                              
        if ($1 ~ /\[.*\]/)                                                   
                scope=trim(substr($1,2,length($1)-2));                             
        else {                                                   
                name=trim($1)
                value=$2;  
                if (length(value) > 0) { 
                        printf("export %s_%s=\"%s\"\n", scope, name, value); 
                } 
        } 
}

3 使用示例

# ini 文件
[app]
arguments= --debug
# 将ini文件转换为临时的shell脚本。
tmpfile=`mktemp'
cat app.ini | awk -F '=' -f ini2env.awk >> $tmpfile
# 加载sh脚本,设置环境变量。
source $tmpfile
# 删除临时脚本。
rm $tmpfile

# 启动程序,将ini参数传入。
app=./a.out
$app $app_arguments

 

© 著作权归作者所有

t

tommwq

粉丝 3
博文 38
码字总数 34798
作品 0
广州
私信 提问
多个平台的 Java Launcher 脚本

通常对于服务来说,过长的命令往往让人感到厌烦,人们需要的只是简单的操作,并且能够支持复杂的功能,对于 Java 开发的服务来说更是如此。 一个比较复杂的 Jar 服务使用Java启动,命令如下 ...

Force武装卫队
2015/06/09
3.4K
8
怎样使用 awk 删掉文件中重复的行

学习怎样使用 awk 的 在不重新排序或改变原排列顺序的前提下删掉重复的行。 假设你有一个文本文件,你需要删掉所有重复的行。 TL;DR 要保持原来的排列顺序删掉重复行,使用: 工作原理 这个脚...

作者: Lazarus Lazaridis
2019/12/13
0
0
Shell实现读取ini格式配置文件方法

原文 http://www.jb51.net/article/60854.htm ini文件格式一般都是由节、键、值三部分组成 格式: [第一节 ] 第一个键 = 值 第二个键 = 第二个值 [第二节 ] 第一个键 = val1,val2,val3 例子:...

pingglala
2017/01/16
0
0
扣丁学堂Linux培训之Linux命令大全分享

  本篇文章扣丁学堂Linux培训小编给大家分享一下Linux开发技能的命令,掌握好了Linux开发方面的命令就能更好的操作Linux开发,对Linux开发感兴趣或者是想要学习Linux开发技能的小伙伴下面就...

扣丁学堂
2018/08/29
0
0
怎样使用 awk 删掉文件中重复的行 - 知乎

学习怎样使用 awk 的 !visited++ 在不重新排序或改变原排列顺序的前提下删掉重复的行。 -- Lazarus Lazaridis(作者) 学习怎样使用 awk 的 在不重新排序或改变原排列顺序的前提下删掉重复的...

Linux 爱好者
2019/12/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何制作省市级别上钻下取的在线疫情地图

目前大多数省级尺度的疫情地图,不能精细的表达各个城市的疫情差异和发展事态。纯粹市级维度的地图由于全国市比较多,很难快速查看自己所在省市的疫情分布情况。我们制作一个省市下钻上取的疫...

空间数据可视化
今天
113
0
用Markdown编程之虚转实

没变成机器码之前,撒都是虚的。而要变成机器码必须有长度。有长度后必然是结构划分。之后就是逻辑正确。而逻辑正确可以看成正确的值。 由此,基础行为有:长度的比对转换、结构的解析、值的...

dwcz
今天
80
0
ASP之ADODB.Stream

ASP 其实很强,真的,很强... 但是,也很难,难就难在没有文档啊~~~ 因为 ASP 经常会用到很多服务器对象,本文记录下在 ASP 中的 Stream(流)操作。 ADODB.Stream 未完待续,敬请期待......

AioDiage
今天
71
0
从源码看世界:Springboot整合Mybatis后到底做了什么

在Mybatis一次数据库操作过程的文章中,我展示了使用Mybatis操作数据库的demo,但实际使用时并不会这里写代码,因为一般都会使用springboot了,那现在我们一起来看看Springboot整合Mybatis之...

壞天空_囝仔
今天
46
0
【自用】 Flutter GestureDetector 给控件添加监听事件

Dart GestureDetector( child: Text("xxxx"), onTap: () => _onXxxxCall(index), ) PS:自用的 不做解释 作者:一个吃货帅锅...

Tensor丨思悟
今天
67
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部