sed替换行内部分匹配数据,一键替换密码配置

场景:
应用配置文件(application-dev.properties)中密码, 客户希望通过脚本一键替换:
spring.datasource.druid.primary.password=oxox
spring.datasource.druid.primary.password=YourNewPasswd

sed替换

#1.模糊分组匹配
sed -i -r "s#(spring.datasource.druid.primary.password=)(.*)#\1YourNewPasswd#g" application-dev.properties

#2.精确标记以spring开头(^), 以剩下数据结尾($)
sed -i -r "s#(^spring.datasource.druid.primary.password=)(.*$)#\1YourNewPasswd22#g" application-dev.properties
[admin@localhost bifrost_8072]$ vim application-dev.properties                                               

druid公钥密码生成, 替换

#!/bin/bash

### mysql passwd, 可以 $1 入参方式传递
MYSQL_PASSWORD=123456

###get password & publicKey
java -cp druid-1.0.26.jar com.alibaba.druid.filter.config.ConfigTools $MYSQL_PASSWORD > key.tmp
PASSWORD=`cat key.tmp |grep password:|cut -d: -f2`
PUBLIC_KEY=`cat key.tmp |grep publicKey:|cut -d: -f2`

echo $PASSWORD
echo $PUBLIC_KEY

### app dir enum
APP_DIR=oxox_8080

#判断文件夹是否存在 -d
if [[ ! -d "$APP_DIR" ]]; then
 echo "文件夹不存在"
else
 echo "文件夹存在"
 sed -i -r "s#(^spring.datasource.druid.primary.password=)(.*$)#\1$PASSWORD#g" ./$APP_DIR/application-dev.properties
 sed -i "s#druid.publickey=.*#druid.publickey=$PUBLIC_KEY#g" ./$APP_DIR/application-dev.properties
 echo "替换完成..."
fi

完整方案1

#!/bin/bash

### mysql passwd
MYSQL_PASSWORD=$1

### sftp passwd
APP_PASSWORD=$2

### app dir enum
APP_DIR="/home/admin/deploy"

###Java runtime environment is required
###Druid-1.0.26.jar and shell script should be in the same level directory
function check_jdk()
{
  ### need JAVA_HOME.  
  if [[ ! -d $JAVA_HOME ]];
  then
    echo "JAVA_HOME not set"
    exit 1
  else
    echo "JAVA_HOME=$JAVA_HOME"
  fi
}
###invoke function
check_jdk 


function install_info(){
  ### execute shell param confirm
  echo
  echo "MYSQL_PASSWORD: ${MYSQL_PASSWORD}"
  echo "APP_PASSWORD: ${APP_PASSWORD}"
  echo "APP_DIR: ${APP_DIR}"
  echo

  while true; do
    read -p "Check that the configuration, press [y/n] to continue: " yn
    case $yn in
      [Yy]* ) break;;
      [Nn]* ) exit;;
      * ) echo "please input Y/N.";;
    esac
  done
}
###invoke function
install_info


###get password & publicKey
function encrypt_mysql()
{
  if [ -z $MYSQL_PASSWORD ];
  then
    echo "MYSQL_PASSWORD not set" > key.tmp
  else
    java -cp druid-1.0.26.jar com.alibaba.druid.filter.config.ConfigTools $MYSQL_PASSWORD > key.tmp
  fi
}
###invoke function
encrypt_mysql

PASSWORD=`cat key.tmp |grep password:|cut -d: -f2`
PUBLIC_KEY=`cat key.tmp |grep publicKey:|cut -d: -f2`

echo $PASSWORD
echo $PUBLIC_KEY


###alter mysql passwd
function alter_mysql()
{
  if [ -z $MYSQL_PASSWORD ];
  then
    echo "MYSQL_PASSWORD not set"
  else
    find $APP_DIR/* -type f \( -name *.properties -o -name *.yml \) |xargs sed -i -r "s#(^spring.datasource.druid.primary.password=)(.*$)#\1$PASSWORD#g" 
    find $APP_DIR/* -type f \( -name *.properties -o -name *.yml \) |xargs sed -i -r "s#(^druid.publickey=)(.*)#\1$PUBLIC_KEY#g" 
  fi
}


#alter app passwd
function alter_app()
{
  if [ -z $APP_PASSWORD ];
  then
    echo "APP_PASSWORD not set"
  else
    find $APP_DIR/* -type f \( -name *.properties -o -name *.yml \) |xargs sed -i -r "s#(^bifrost.sftp.password=)(.*)#\1$APP_PASSWORD#g" 
  fi
}



### alter config
function alter_config()
{ 
  echo "$APP_DIR 配置替换..."
  #判断文件夹是否存在 -d
  if [[ ! -d "$APP_DIR" ]]; then
    echo "文件夹 $APP_DIR 不存在"
  else
    echo "文件夹 $APP_DIR 存在"
    ###invoke function
    alter_mysql
    alter_app
    echo "$APP_DIR 替换完成"
  fi
}
###invoke function
alter_config

完整方案2

#!/bin/bash

### mysql passwd
MYSQL_PASSWORD=$1

### sftp passwd
APP_PASSWORD=$2

### app dir enum
APP_DIR_ARRAY=(app1 app2 app3)
APP_DIR=""

###Java runtime environment is required
###Druid-1.0.26.jar and shell script should be in the same level directory
function check_jdk()
{
  ### need JAVA_HOME.  
  if [[ ! -d $JAVA_HOME ]];
  then
    echo "JAVA_HOME not set"
    exit 1
  else
    echo "JAVA_HOME=$JAVA_HOME"
  fi
}
###invoke function
check_jdk 


function install_info(){
  ### execute shell param confirm
  echo
  echo "MYSQL_PASSWORD: ${MYSQL_PASSWORD}"
  echo "APP_PASSWORD: ${APP_PASSWORD}"
  echo "APP_DIR_ARRAY: ${APP_DIR_ARRAY[*]}"
  echo

  while true; do
    read -p "Check that the configuration, press [y/n] to continue: " yn
    case $yn in
      [Yy]* ) break;;
      [Nn]* ) exit;;
      * ) echo "please input Y/N.";;
    esac
  done
}
###invoke function
install_info


###get password & publicKey
function encrypt_mysql()
{
  if [ -z $MYSQL_PASSWORD ];
  then
    echo "MYSQL_PASSWORD not set" > key.tmp
  else
    java -cp druid-1.0.26.jar com.alibaba.druid.filter.config.ConfigTools $MYSQL_PASSWORD > key.tmp
  fi
}
###invoke function
encrypt_mysql

PASSWORD=`cat key.tmp |grep password:|cut -d: -f2`
PUBLIC_KEY=`cat key.tmp |grep publicKey:|cut -d: -f2`

echo $PASSWORD
echo $PUBLIC_KEY


###alter 
function alter_app1()
{

###mysql password
  if [ -z $MYSQL_PASSWORD ];
  then
    echo "MYSQL_PASSWORD not set"
  else
    find $APP_DIR/* -type f \( -name *.properties -o -name *.yml \) |xargs sed -i -r "s#(^spring.datasource.druid.primary.password=)(.*$)#\1$PASSWORD#g" 
    find $APP_DIR/* -type f \( -name *.properties -o -name *.yml \) |xargs sed -i -r "s#(^druid.publickey=)(.*)#\1$PUBLIC_KEY#g" 
  fi

###app sftp password
  if [ -z $APP_PASSWORD ];
  then
    echo "APP_PASSWORD not set"
  else
    find $APP_DIR/* -type f \( -name *.properties -o -name *.yml \) |xargs sed -i -r "s#(^bifrost.sftp.password=)(.*)#\1$APP_PASSWORD#g"
  fi

}


###alter
function alter_app2()
{

###mysql password
  if [ -z $MYSQL_PASSWORD ];
  then
    echo "MYSQL_PASSWORD not set"
  else
    find $APP_DIR/* -type f \( -name *.properties -o -name *.yml \) |xargs sed -i -r "s#(^forseti.database.password=)(.*$)#\1$PASSWORD#g"
    find $APP_DIR/* -type f \( -name *.properties -o -name *.yml \) |xargs sed -i -r "s#(^forseti.database.connectionProperties.*config.decrypt.key=)(.*)#\1$PUBLIC_KEY#g"
  fi

}



### alter config
function alter_config()
{ 
  for (( i = 1; i <= "${#APP_DIR_ARRAY[@]}"; i++ ))
  do
    APP_DIR=${APP_DIR_ARRAY[$(($i-1))]}
    echo "$APP_DIR 配置替换..."
    #判断文件夹是否存在 -d
    if [[ ! -d "$APP_DIR" ]]; then
      echo "文件夹 $APP_DIR 不存在"
    else
      echo "文件夹 $APP_DIR 存在"
      ###invoke function
      case $APP_DIR in
        app1) alter_app1;;
        app2) alter_app2;;
        app3) alter_app3;;
        *)  echo "error dir"  ;;
      esac
      echo "$APP_DIR 替换完成"
    fi
  done;
}
###invoke function
alter_config


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值