1

古いバージョンの git を実行しており、ホスト名の構成を更新するスクリプトを作成しています。

私の問題は、変数が正規表現で使用される後方参照と混合されないように、正しいエスケープ文字の組み合わせを理解できないことです。

これが私の最善の努力です

#!/bin/bash
#code
foo=`ec2-describe-instances i-f95e4b82 | grep amazon | awk '{print $4}'`
sed -i "s/\(ec2-user@\)\(.*\)\(:repo\.git\)/\\1 $foo \\3/" /var/www/.git/config

これにより、最初の後方参照と変数 foo の間にスペースが挿入されます。希望は、最初の後方参照と $foo の間にそのスペースを入れないことです。後方参照の代わりにリテラルを使用できると思いますが、ユーザー名とリポジトリは変更される可能性があります。

何か案は?

編集

"s/\(ec2-user@\)\(.*\)\(:repo\.git\)/\\1$foo\\3/"

foo が 1 と結合され、間違った後方参照が生成されるため、正しい答えは生成されません。$foo をエスケープする方法がわかりません。

4

1 に答える 1

0

変数を分離する必要がある$fooため、その名前を周囲の他の文字と区別するために変数の周りにスペースを入れる必要はありません。試す

sed -i "s/\(ec2-user@\)\(.*\)\(:repo\.git\)/\\1${foo}\\3/" /var/www/.git/config

foo の後にスペースのみが必要な場合は、次を使用します

sed -i "s/\(ec2-user@\)\(.*\)\(:repo\.git\)/\\1${foo} \\3/" /var/www/.git/config

IHTH

于 2012-08-28T02:38:12.043 に答える