sed に置き換えると、期待どおりに変数の拡張は許可されず、追加の文字が表示されます。

sed に置き換えると、期待どおりに変数の拡張は許可されず、追加の文字が表示されます。

問題が少しありますsed

ファイルの文字列を別のものに置き換える必要がありますが、部分的に成功しましたが、t実際の出力の前に追加の文字列が表示されます。

私が使用するコマンドは次のとおりです。

password=$(openssl rand -base64 8)
new_variable=$(echo -n "$password{s4lt}"  | sha256sum | awk '{print $1}')
to_be='#jbcrypt:$2a$10$mvkjME9eLxgvNu1f35SsSe5JKuVZaDf7xZX8DufaUMsMtDMzrGPUa'
with_be="<passwordHash>s4lt:${new_variable}</passwordHash>"

苦痛は取り替えられるべきである

<passwordHash>#jbcrypt:$2a$10$mvkjME9eLxgvNuMsMtDMzrGPUa</passwordHash>

そして

<passwordHash>s4lt:c3b43792278faa66ffad524c6433bb755057455a0d43b4af4cab927dafc84f8a</passwordHash>

コマンドの使用

sed -i "/$to_be/c \t\t$with_be" /var/lib/jenkins/users/admin/config.xml

結果

t   <passwordHash>s4lt:c3b43792278faa66ffad524c6433bb755057455a0d43b4af4cab927dafc84f8a</passwordHash>

答え1

パターンにはが含まれているため、範囲式に別の区切り文字を使用するように指示する/必要があります。ここでは区切り記号として使用しています。sed/$to_be/@

sed -i "\@$to_be@c\ \t\t$with_be" /var/lib/jenkins/users/admin/config.xml

また、コマンドの後ろのバックスラッシュに注意してくださいc

上記のようにエスケープされている場合は、範囲式に代替区切り文字を使用できます。\改行文字以外のほとんどすべての文字を使用できます。選択する値の1つがありません$to_be

("変更") コマンドcの形式は次のとおりです。

range c\
text

GNUは、代替テキストがコマンド自体と同じ行に表示されることを許可するという点で許容可能です。sedつまり、 。range c\ text

関連情報