加密密码替换

加密密码替换

我针对每个环境都加密了密码。它有一些特殊的字符。以下是开发环境中的一个示例(带有正斜杠)

    $$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

我正在尝试更换密码并遇到以下问题。

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

替换作为变量的字符串时如何转义特殊字符(不知道特殊字符的位置)。

答案1

的价值Param_INFA_PASS显而易见Base64。它可以包含字母、数字和字符+/=

对于普通 grep,这些字符都不是特殊的。请注意,对于 egrep 或grep -E,该字符+很特殊,需要转义。不要使用grep -i:Base64 区分大小写。

对于 sed 来说,如果你做得正确的话,这些字符都不是特殊的。在s命令中,您可以使用任何字符 来代替/。例如,选择 Base64 中未使用的一个

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

¹换行符和反斜杠除外。

答案2

sed才不是用作/其分隔符。

由于这些示例,我们认为 sed 用作/分隔符。但是它可以使用任何字符。

例如sed 's/abc/def/'可以写成sed 's^abc^def^.后面跟着的s是分隔符。

如果输入文本中未使用某个字符,那么您可以利用它来发挥作用(也许选择非打印字符)。

相关内容