\を含む変数をsedに置き換えます。

\を含む変数をsedに置き換えます。

文字列をファイルの文字列に置き換えようとしています$old$new

old=ESX_10.1.1.1\@11.11.11.11
new=host_15_11_0_111.static

私はsedコマンドを使用しています:

sed i "s/${old}/${new}/g" /filename

ただし、単語を置き換えず、エラーも表示しません。私は交換のようなさまざまな方法を試しました。

sed i "s,${old},${new},g" /filename

そして

sed i "s=${old}=${new}=g" /filename

しかし、うまくいきません。この問題を解決するのに役立ちます

答え1

\他人と一緒に脱出する必要があります\。次のように bash シェル変数でこれを行うことができます。

sed -i -e "s/${old//\\/\\\\}/${new//\\/\\\\}/g" filename

バラよりman bash パラメータ拡張のための${parameter/pattern/string}。繰り返し実行//の代わりにwithバージョンを使用してください。/そして私たちは自分で逃げなければならない\ので、それが何度も繰り返されるでしょう。

関連情報