3

ユーザーが sed を使用して事前に定義された方法でファイルをリモートで編集するために使用できるパッチを作成しようとしています。これを各コンピューターで手動で行うこともできますが、時間がかかります。

私が苦労している行は次のとおりです。

host=[hostname]
port=[portnum]
ssh -t $host -p $port "cp ~/file1 ~/file1.bak ; sed -i \"s/fcn1('param1', $2)\n/fcn2('param2'):$zoom\n/g\" ~/file1"

これにより、file1 のバックアップが作成され、ファイル内の行が編集されます。実際には複数の行を編集したいのですが、この行は問題を示しています: sed コマンド内で $ 記号が使用されていなければ、コマンドは機能します。

これらの $ 記号をエスケープする方法をいくつか試しましたが、機能する方法が見つからないようです。を使用できます。検索ではワイルドカードを使用しますが、置換文字列では明らかにそうではありません。

$2 の展開を避けるために、sed コマンドに単一引用符を使用しますが、コマンド内で単一引用符が既に使用されています。

この問題を克服する方法について何か考えがある人はいますか? 提案をお寄せいただきありがとうございます。

4

1 に答える 1

3

これもうまくいくはずです:

ssh -t $host -p $port "cp ~/file1 ~/file1.bak && sed -i \"s/fcn1('param1', \\\$2)/fcn2('param2'):\\\$zoom/g\" file1"

リモート bash で に渡される文字列の $ 記号をエスケープする必要があるため、3 つのバックスラッシュが必要ですsed。経由で送信するときは、バックスラッシュと $ 記号をエスケープする必要がありますssh

于 2013-08-01T16:00:03.620 に答える