原创文章,转载请标明出处
1、shell解析配置文件基本操作
首先shell要解析的配置文件,按照一定的格式进行编写;
其次,使用shell获取要解析的模块内容;
最后,从获取的模块内容的解析出所需的value值。
如下:
配置文件db_mes.cfg包含了clickhouse与postgresql两种db的连接信息,
根据这些信息解析配置文件的内容,然后从模块的内容中获取数据库的user、password、port、database的值
db_mes.cfg
[clickhouse]
user=test
password=mytest
port=9000
database=mydb
[\clickhouse]
[postgresql]
user=test2
password=mytest2
port=5432
database=mydb
[\postgresql]
2、获取配置文件指定的模块section
cfg_mes.sh
section=$1
file=/home/cfg/db_mes.cfg
sed -n '/\[$section\]/,/\[\/$section\]/p' $flile # sed -n '/XXX/,/XXX/p' 表示从 'XXX'开始 到'XXX' 结束的所有内同。
将section使用db名称替换将打印出这个section包含的内容
sh cfg_mes.sh clickhouse
输出如下
[clickhouse]
user=test
password=mytest
port=9000
database=mydb
[\clickhouse]
3、解析section中的value信息
使用awk -F参数对获取的字符串进行split,并获取split后第二个字符完整内容
cfg_mes.sh
section=$1
pwd=$2
file=/home/cfg/db_mes.cfg
sed -n '/\[$section\]/,/\[\/$section\]/p' $flile|grep ^$pwd|awk -F= '{print $2}'
sed -n '/\[$section\]/,/\[\/$section\]/p' $flile|grep ^$pwd|cut -f2 -d '='
sed -n '/\[$section\]/,/\[\/$section\]/p' $flile|grep ^$pwd|sed -n -e "s/^\($pwd=\)\([^ ']*\)\(.*\)$/\2/p"
后续测试,第三种也可以这么写,有哪位读者明白的,可以留言补充一下
sed -n '/\[$section\]/,/\[\/$section\]/p' $flile|grep ^$pwd|sed -n -e "s/^\($pwd=\)\(.*\)$/\2/p"
或
sed -n '/\[$section\]/,/\[\/$section\]/p' $flile|grep ^$pwd|sed -n -e "s/^\($pwd=\)\([^ ']*\)$/\2/p"
sed命令配置反向引用:小括号反向引用,获取值在拿来使用
参考:
https://www.bbsmax.com/A/kmzLQb4KJG/
http://events.jianshu.io/p/93448199781b
输出如下
mytest
mytest
mytest
posted on
浙公网安备 33010602011771号