SED e Senhas Criptografadas (Dinamicamente Escape de Caracteres Especiais?) [duplicado]

0
    

Esta pergunta já tem uma resposta aqui:

    

RESOLVIDO, código atualizado abaixo: Como é possível escapar dinamicamente caracteres especiais no sed? Parece que o sed não consegue lidar com isso. Talvez haja outra abordagem para isso no entanto. A idéia é capturar uma lista de todas as conexões de banco de dados e substituir sua senha por outra senha criptografada (embora 'teste' seja usado abaixo). A / na criptografia AES, entre os outros caracteres especiais, é um problema.

#!/bin/bash

DB_USER=user
DB_HOST=hostname
DS_PATH=$HOME/dbconnects

DS_FILELIST=('grep -il '${DB_USER}\|${DB_HOST}\|password-encrypted' ${DS_PATH}')



CURRENT_PASSWD () {
for current_pass in ${ds_list}; do

# UPDATED HERE: Below I added the last pipe into sed, which escapes all the regexp operators (][.^$*), the escaping character itself (\), and the separator (/).

grep password-encrypted ${current_pass} | sed 's/<password-encrypted>//;s/<\/password-encrypted>//' | awk -F ' ' '{print $1}' |  sed 's/[][\/.^$*]/\&/g' 
done
}

for ds_list in ${DS_FILELIST[@]}; do
echo ${ds_list}
CURRENT_PASSWD
sed --in-place  "s/$(CURRENT_PASSWD)/test/g" ${ds_list}
done

Saída:

[user@hostname ~]$ ./Modify_Password.sh
/app/user/home/dbconnects/dbconnect1.xml
{AES}ikfhdgyspeuwmkC6U/s86Hf2oarifh4309ytfrRs8r+uOewsf43sfD
sed: -e expression #1, char 73: unknown option to 's'

Nova saída:

[user@hostname ~]$ ./Modify_DatasourcePassword.sh
/app/user/home/dbconnects/dbconnect1.xml
{AES}ikfhdgyspeuwmkC6U\/s86Hf2oarifh4309ytfrRs8r+uOewsf43sfD
# The / is now escaped.
    
por Motorahead 16.11.2017 / 01:15

0 respostas