問題が少しあります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