リモートSSHサーバーで強制変数を拡張する

リモートSSHサーバーで強制変数を拡張する

リモートサーバー上のファイルの文字列を置き換えようとしています。

ssh $login "
replacement=\`find . -name file\`;
sed -i -e 's/contact/\$replacement/g' path/file;
"

ただし、sedで使用されている$ replacement変数の内容を取得することはできません。上記の例は$replacement私のファイルに印刷されます。私も試しました

sed -i -e 's/contact/\"\$replacement\"/g' path/file;

しかし、ちょうど印刷されます"$replacement"

正しい構文は何ですか?

ベストアンサー1

問題は、$ replacementが一重引用符の間で拡張されないことです。

この場合はsed -i -e "s/contact/$replacement/g" path/file;機能する必要があります。

またはこれ:

sed -i -e 's/nothing/'$replacement'/g' path/file;

例:

$ echo "There's nothing there." > file 
$ cat file 
There's nothing there.
$ replacement=something 
$ sed -i -e 's/nothing/'$replacement'/g' file;
$ cat file
There's something there.

以下の Kusalananda のコメントへの応答: 代替パス (パス) にスラッシュが含まれている場合は、sed で使用する前に前処理する必要があります。

replacement=$(sed 's@\/@\\\/@g' <<< "$replacement")

おすすめ記事