リモートサーバー上のファイルの文字列を置き換えようとしています。
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")