批量替换配置,内容包含key=value 格式
配置autoconfig.conf内容格式,通过"->"分隔:
配置文件->配置项key->配置值value
例如:
cache.properties->redis.serverList->127.0.0.1:6379
脚本主体autoconfig.sh
#!/bin/sh
# 根据文件相对路径 key 替换对应的值
replaceValue() {
file_path=$1
prop_key=$2
prop_value=$3
#统计相同的key值有多少个
line=`cat $file_path |grep -v grep |grep -v ^# |grep $prop_key= |wc -l `
#判断line是否为空
if [ $line -lt 1 ]; then
echo "$prop_key line is null"
#return;
else
#查看需要替换的key的value是否有特殊字符"&"
result=$(echo $prop_value|grep "&")
if [ -n "$result" ];then
#echo "匹配到特殊字符&,替换特殊字符为\&"
new_prop_value=`echo $prop_value | sed -r 's#\&#\\\&#g'`
#替换key的值
sed -ri "s#(^$prop_key=)[^*]*#\1$new_prop_value#" $file_path
else
sed -ri "s#(^$prop_key=)[^*]*#\1$prop_value#" $file_path
fi
fi
}
# 逐行读取文件内容
auto_file_paths=$1
read_autoconfig(){
cat ./autoconfig.conf | while read line
do
if [[ "$line" =~ ^# ]]; then
continue;
fi
file_name=$(echo $line | awk -F'->' '{print $1}');
prop_key=$(echo $line | awk -F'->' '{print $2}');
prop_value=$(echo $line | awk -F'->' '{print $3}');
# 找到对应文件路径
if [ -n "$auto_file_paths" ];then
file_paths=$(find $auto_file_paths -name $file_name -type f)
else
echo "输入的配置文件路径auto_file_paths为空,请检查路径"
exit;
fi
for file_path in $file_paths
do
replaceValue $file_path $prop_key $prop_value
done
done
}
read_autoconfig $auto_file_paths