sshとsedを使って別サーバのファイルの文字列を書き換える

問題:

置換文字列に「;(セミコロン)」がある場合

 

やりたかったこと

.txtファイルの9行目の文字列を書き換えたかった。
%days = ("21"=>"23"); //常に21と23の数値が入っているわけではない

%days = ("24"=>"25");

こんな感じ

 

失敗:

spawn ssh $USER_NAME_@$SERVER_IP 'sed -i.bak -e ¥¥¥"9c %days = ("24"=>"25");¥¥¥" 置換対象ファイルパス.txt'

→「;」のせいで複数コマンドがあると思われちゃう

 

コンソールはこんな感じ

spawn ssh USER_NAME_@SERVER_IP sed -i.bak -e "9c 文字列AAA
invalid command name """
   while executing
"¥" 置換対象ファイルパス.txt"

 

解決策:

セミコロンを文字列として認識する方法がわからなかったので
置換文字列の条件を追加する
(ついでにsshからも1回離してしまった。。。)

 

expect ¥"$ ¥" { send ¥"sed -i.bak$NOW -e '9s/¥¥¥"..¥¥¥"=>¥¥¥"..¥¥¥"/¥¥¥"24¥¥¥"=>¥¥¥"25¥¥¥"/' 置換対象ファイルパス.txt ¥r¥" }

 

おまけ:

一列での定義でもできた

spawn ssh $USER_NAME_@$SERVER_IP sed -i.bak$NOW -e '9s/¥¥¥"..¥¥¥"=>¥¥¥"..¥¥¥"/¥¥¥"24¥¥¥"=>¥¥¥"25¥¥¥"/' 置換対象ファイルパス.txt

 

参考サイトさま

http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230879/