암호화된 비밀번호 교체 [중복]

암호화된 비밀번호 교체 [중복]

각 환경의 비밀번호를 암호화했습니다. 몇 가지 특수 문자가 있습니다. 다음은 개발 환경의 예입니다(슬래시 포함).

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

입력 텍스트에 문자가 사용되지 않으면 이를 활용할 수 있습니다(인쇄되지 않는 문자 선택 등).

관련 정보