cfg文件是一种常见配置文件,存储结构可以看做是二级Map,在Shell脚本中可以使用sed来解析得到想要的值

1. 一个cfg示例文件:config.cfg

[a]
a=aa
b=ab
[b]
a=ba
b=bb
[c]
a=ca
b=cb
c=cc

2. 解析的shell脚本:get_cfg.sh

#!/bin/bashfunction get_sec_value()
{local file_name="${1}" # cfg文件local sec_name="${2}" # 一个key-value块名local key_name="${3}" # 一个key-value块中的keylocal line_number=$(cat ${file_name} | grep -n "^[ ]*\[[ ]*${sec_name}[ ]*\]" | sed -n '1p' | awk -F ':' '{print $1}')if [ "x${line_number}" = "x" ];thenreturn 1fi# 获取目标key-value块,并输出到临时文件中local temp_file="$(dirname ${file_name})/get_sec_value.$(date '+%Y%m%d%H%M%S')"awk -F '#' '{print $1}' ${file_name} | sed '/^[ ]*$/d' | sed -n "/^[ ]*\[[ ]*${sec_name}[ ]*\]/,/^[ ]*\[.*\]/p" | sed '/^[ ]*\[.*\]/d' > ${temp_file}# 若key_name不为空,则查找输出对应的值if [ "x${key_name}" != "x" ];thenif [ "x$(cat ${temp_file} | grep "^[ ]*${key_name}[ ]*=.*" | sed -n '1p')" != "x" ];thenecho $(cat ${temp_file} | grep "^[ ]*${key_name}[ ]*=.*" | sed -n '1p' | awk -F '=' '{print $2}')rm -f ${temp_file}return 0elserm -f ${temp_file}return 1fifi# 若key_name为空,则把目标块中的所有行输出到一个数组中local count=0unset RETURNwhile read linedoRETURN[${count}]=${line}((count+=1))done < ${temp_file}rm -f ${temp_file}return 0
}echo $(get_sec_value config.cfg a b)get_sec_value config.cfg c
for value in ${RETURN[@]}
doecho ${value}
doneget_sec_value config.cfg b
for value in ${RETURN[@]}
doecho ${value}
doneexit 0

3. 执行结果

RealJt-Mac:RealJt ~ $ ./get_cfg.sh
ab
a=ca
b=cb
c=cc
a=ba
b=bb

Shell中使用sed解析cfg文件相关推荐

  1. python 解析cfg文件

    python 中有这么一个库configparser,用这个库来解析cfg文件,代码如下: import configparser def get_conf_parse(path,key,sectio ...

  2. python解析xml文件elementtree_在python中使用ElementTree解析xml文件

    ElementTree是python自带的处理xml格式文件的模块,位于libxmletreeElementTree.py.这个模块有两个基本概念:Element和ElementTree. 表示整个树 ...

  3. Linux shell中在vim打开的文件中查找关键字

    linux shell中使用vi命令打开文本文件后,如果需要查找字符,可在normal模式下直接按"/"进入查找模式,输入要查找的字符并按下回车,vim会跳到第一个匹配的位置. 按 ...

  4. 在shell脚本中使用sed命令更改文件中两个相似参数的其中一个

    文件中含有两段数据,第一段是mysql1的配置,第二段是mysql2的配置. [root@ip-10-40-18-118 szh]# cat test.txt mysql1:host: 1.1.1.1 ...

  5. shell中通过sed替换文件中路径

    通常sed指令修改行内容时使用:sed -i " 9 s/^.*/"type in what you want modified!"/" 其中"typ ...

  6. php调用shell执行scp,Shell中使用scp命令实现文件上传代码

    自从法现 SSH 可以执行远端命令后,ftp 软件也渐渐很少用了. 每次更新服务器代码,都要打包.上传.登录到服务器修改文件权限.更新 Cache 等等,又慢又容易出错,所以做成脚本,一次帮我搞定,自 ...

  7. Python 3.6 中使用pdfminer解析pdf文件

    所使用python环境为最新的3.6版本 一.安装pdfminer模块 安装anaconda后,直接可以通过pip安装 pip install pdfminer3k 如上图所示安装成功. 二.在IDE ...

  8. Flutter中使用flutter_html解析html文件

    1. 安装插件 配置 flutter_html 插件. dependencies:flutter:sdk: flutterflutter_localizations:sdk: flutterdate_ ...

  9. Shell中的Sed命令详解

    简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处 ...

最新文章

  1. Xcode 真机程序发布测试
  2. 为什么eolinker发送老是等待_如何妙用 eoLinker 进行接口测试
  3. python 散点图_Python绘制散点图
  4. Activity之间使用intent传递大量数据带来问题总结
  5. 数字化时代的创新意欲何为?
  6. 集训2--进程控制理论
  7. JAVA里16进制和字节数组互转
  8. 作者:景志刚(1977-),男,就职于中国人民银行征信中心数据部
  9. xml-apis-ext.jar
  10. nlp中bpe_缓冲池扩展(BPE)–内存中OLTP:内存挑战
  11. 万人马拉松,人脸识别系统如何又快又准完成校验?
  12. 免费送瑞星产品序列号?其实送的是Trojan-Downloader.Win32.VB.lbv
  13. Java 合并、拆分PDF文档
  14. windows10系统连接蓝牙鼠标自动断开解决方案
  15. 小猫钓鱼纸牌游戏java_C语言实现纸牌游戏(小猫钓鱼)
  16. 响应服务器530 5.7.0,SMTPSenderRefused(530,需要b'5.7.0身份验证)
  17. 抖音育儿类账号的创作灵感分享, 想进圈的不妨了解一下
  18. 《决战大数据》读书笔记(二) cookie识别用户行为已经过时
  19. Linux之美—windows server基础(在windows上安装server机)
  20. logstash String转data,@timestamp转化为东八区时间

热门文章

  1. js实现网页左侧导航条,鼠标经过显示隐藏的面板
  2. pdb符号库文件详解
  3. oracle rac应急_oracle rac 多数据库
  4. bash之波浪号扩展(tilde expansion)
  5. Java、Rectangle类
  6. rowspan 动态变化_rowspan相同值合并 怎么动态的rowspan合并行
  7. SpringBoot+Vue下载Excel文件流(No converter、Excel乱码)
  8. 仿小黄车头部滚动消息动画
  9. 自学PHP与培训PHP的到底有多大的差距?
  10. gis与计算机科学的关系,GIS常识 地理信息系统与相关学科的关系