0
点赞
收藏
分享

微信扫一扫

Shell脚本读取yml文件中的值,并替换另一文件对应的占位符

1.源文件main.yaml内容

repository: Mysql
tag: V1.0.0
port: 3306

2.目标文件value.yaml内容

image:
repository: {repository}
tag: {tag}
port: {port}

3.替换脚本update.sh

#!/bin/bash
#AUTHOR:anqixiang
#DATE:2020-04-11
#MODIFY:
#FUNCTION:读取key: value格式的源文件,并将目标文件中{key}的值替换为value

set -e
current_dir=$(cd `dirname $0`;pwd) #脚本所在目录

#for循环默认以空格、制表符、换行符作为分隔符,导致把一行的内容分隔为两行,因此指定只以换行符为分隔符
IFS_OLD=$IFS #保存初始的值
IFS=$'\n' #以换行符作为分隔符

src_file=${current_dir}/main.yaml
dst_file=${current_dir}/value.yaml
[ ! -f ${dst_file}.bak ] && cp ${dst_file}{,.bak}

for i in $(cat ${src_file})
do
key=$(echo ${i%%: *})
value=$(echo ${i##*: })
#sed -ri "/\{$key\}/ s#^(.*)(: )(.*)#\1\2${value}#" ${dst_file}
sed -ri "/\{$key\}/ s#\{$key\}#${value}#" ${dst_file}
done

IFS=${IFS_OLD} #恢复初始值
set +e

4.执行脚本

bash update.sh

最终结果

cat value.yaml

image:
repository: Mysql
tag: V1.0.0
port: 3306


举报

相关推荐

0 条评论