需求
读取ini配置文件中对应key的value值。
配置文件格式
有section划分不同节,其名称唯一。不同section中key名称可能相同,但同一section中key名称唯一。
[section_1]
key_1=value_1
key_2=value_2
...
[section_2]
key_1=value_1
key_2=value_2
...
...
方法
之前在网上找了不少方法,直接使用source命令,无法解决key重名问题。采用如下awk命令,当一个section中若有key未定义时,会从该section往下找到其它section中的相同key,导致ini文件校验时会有问题。
awk -F '=' '/\['section名'\]/{a=1}a==1&&$1~/'key名'/{print $2;exit}' ini文件名
最后想到可以将两个section之间的参数先抠出来。需要使用grep 的 Perl 正则模式。其中最后一个section需要单独处理一下,所以加了个或“|”。
grep -Pzo "(?s)(\s*)\N*\[section名].*?\[|\[section名\].*" ini文件名
要求两个[section]之间一定不能有其它的“[”符号了。抠出来之后再通过grep和awk进行二次处理,包括去空格啥的,这里就不写了。