sedを使用して "\"を含む文字列を置き換える方法は? [コピー]

sedを使用して

というファイルがありますマイファイル.txt次のコンテンツが含まれています。

ユーザー名=私のユーザー名
暗号化されたパスワード=9k3S+sS3g\=\=

ユーザー名とパスワードを変更する必要があるたびにシェルスクリプトを実行します。シェルスクリプトは、保存されたユーザー名とパスワードを次の2つの変数に保存します。

前のユーザー名 = "私のユーザー名" 前の
パスワード = "9k3S+sS3g\=\="

newusername="私の新しいユーザー名"

新しいパスワード="U8djlk+h=="

sed -i "s/$oldusername/$newusername/g" MyFile.txt

sed -i "s/$oldpassword/$newpassword/g" MyFile.txt

最初の sed は正しく機能し、ユーザー名を置き換えますが、2 番目の sed コマンドは機能せず、ファイルのパスワードは変更されません。変数に「\」文字があるためです。

誰でもこの問題を解決し、解決策を教えてもらえますか?

ありがとうございます..

ベストアンサー1

愚かな回避策、すべてのバックスラッシュを避けてください。

oldpassword="$(printf "$oldpassword" | sed 's/\\/\\\\/g')"
sed -i "s/$oldpassword/$newpassword/g" MyFile.txt

おすすめ記事