各環境のパスワードを暗号化しました。いくつかの特殊文字があります。以下は開発環境の例です(スラッシュを含む)。
$$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"
¹改行文字とバックスラッシュは除外されます。