改行文字で sed

改行文字で sed

パスワードを暗号化し、「notset」という単語を暗号化された新しいパスワードに置き換えようとしています。問題は、opensslが時々2行以上を含む文字列を生成することです。たとえば、次のようになります。

Salted__▒ہ▒ >▒▒1▒▒▒E
                     ǣ▒▒▒▒"e=8▒lj▒{`(̣▒e

したがって、sedを実行すると失敗します。

これは私が使用するコマンドです:

sed -i 's/PASSWORD=.*/PASSWORD='${P}'/' ${PFILE}

私が受け取ったエラーは次のとおりです。

sed: -e expression #1, char 49: unterminated `s' command

このワイヤゲートがある場合は、文字列全体を交換する方法を知っている人はいますか?私は前にこれを試してみました。

P=`echo ${P} | tr '\n' "\\n"`

しかし、これは役に立ちません。

ベストアンサー1

変数は次のとおりです。いいえ(ほとんどのシェルでは)ランダムなバイナリ値を含みます。

P次の価値を生み出すことで:

P=$( echo 'mysuperpassword3' | 
          openssl enc -aes-256-cbc -pbkdf2 -pass pass:'secret')

$varNULバイト、改行、拡張、その他多くの問題が発生する可能性があります。考えられる解決策の1つは、値をbase64エンコーディングとして保存することです。

P=$( echo 'mysuperpassword3' | 
          openssl enc -aes-256-cbc -pbkdf2 -base64 -pass pass:'secret')

これにより多くの問題を回避できますが、まだ変数拡張を引用する必要があります。

sed -i 's/PASSWORD=.*/PASSWORD='"${P}"'/' "${PFILE}"

おすすめ記事