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/