技術承認テストを自動化するためのいくつかのスクリプトを作成しました。パスワードをプレーンテキストとして書き込むことは許可されていないため、私が使用するスクリプトは複数の変数に関連付けられており、そのうちの1つはパスワードです。実行する前に、password.key=mycryptedpassword
ファイルからその行を取得し、パスワードを復号化してスクリプトで使用します。その後、キーをスクリプトで使用される一時ファイルのパスワードに置き換えようとしました。ここで問題が発生します。次のコードを使用します。
sed -i -e 's/$key/$decryptedPassword/g' json.tmp
一般的にはうまくいきますが、私が出会ったパスワードの1つは次のとおりです。cl&&TiT8
sedとlinux(私は基本的にredhatでkshシェルを使用しています)にこれらの&&
。もしかしたらこんなに奇妙なパスワードを使う方に会うかと心配になるのにどう対処すればいいですか?
概要:これが私がしたことですsed -i -e 's/$key/$decryptedPassword/g' json.tmp
。当時、$decryptedPassword = cl&&TiT8
これはうまくいきませんでした。
ベストアンサー1
sedでこれを行うと、そのs/regexp/replacement/
文字&
はreplacement
特別な意味を持ち、その文字が表示されると一致する文字列に展開されますregexp
。したがって、次のようにエスケープする必要があります\
。
sed -i -e 's/$key/cl\&\&TiT8/g' json.tmp
/
また、and'
と\
andもエスケープする必要があります$key
。$decryptedPassword
sedコマンドを置き換える方法は$key
?$decryptedPassword