Substituição da senha criptografada [duplicada]

0

Eu tenho senhas criptografadas específicas para cada ambiente. Tem alguns caracteres especiais. Abaixo está uma amostra do ambiente de desenvolvimento (que possui barra invertida)

    $$Param_INFA_USER=USR_DF
    $$Param_INFA_PASS=1OFR6pSbNq/yvLtpxHbC9E9KvloTj5tRGpzr9dCMD7E=
v_prst_pwd='grep -i "\$\$Param_INFA_PASS" param_file.parm' | tr -d ' '
v_lbl_pwd='grep -i "\$\$Param_INFA_PASS" param_file.parm | cut -d '=' -f1'
sed -i 's/'$v_prst_pwd'/'$v_lbl_pwd'='$envspfc_pwd'/g' param_file.parm
sed -i s/$$Param_INFA_PASS=**1OFR6pSbNq/yvLtpxHbC9E9KvloTj5tRGpzr9dCMD7E=**/$$Param_INFA_PASS=ABC/g param_file.parm

Estou tentando substituir senhas e tenho problema abaixo.

sed: -e expression #1, char 74: unknown option to 's'

Como escapar de caracteres especiais ao substituir uma string que é uma variável (não ciente da posição de caracteres especiais).

    
por user_297020 02.07.2018 / 17:51

2 respostas

1

O valor de Param_INFA_PASS é evidentemente Base64 . Pode conter letras, dígitos e os caracteres + , / e = .

Para grep simples, nenhum desses caracteres é especial. Tenha em atenção que, para egrep ou grep -E , o carácter + é especial e precisa de ser ignorado. Não use grep -i : Base64 faz distinção entre maiúsculas e minúsculas.

Para sed, nenhum desses caracteres é especial se você fizer certo. No comando s , você pode usar qualquer caractere¹ em vez de / . Então escolha um que não seja usado no Base64, por exemplo

sed -e "s~^PASSWORD=$old_password\$~$new_password~g"

¹ Exceto nova linha e barra invertida.

    
por 02.07.2018 / 19:44
0

sed não usa / como seu separador.

Por causa dos exemplos, achamos que sed usa / como separador. No entanto, ele pode usar qualquer caractere.

por exemplo. sed 's/abc/def/' pode ser escrito como sed 's^abc^def^ . O que sempre segue o s é o separador.

Se houver um caractere que não seja usado no texto de entrada, você poderá usá-lo para sua vantagem (talvez escolha um caractere não imprimível).

    
por 02.07.2018 / 19:43