1

ファイル内の 2 つの文字列の間の特定のテキストを置き換える bash スクリプトを使用しています。次のようになります。

GATEWAYURL = 'myDomain.com'
CONFIGFILE = 'full/path/to/config.file'

replacementString1="s/(?<=gatewayIp:).*(?=,)/\"${GATEWAYURL}\"/;"

perl -pi -e $replacementString1 $CONFIGFILE

これは、ファイルに次のような行を作成するのに最適です。

gatewayIp:"the.old.domain.name.com",

こんな風に見える:

gatewayIp:"myDomain.com",

すべて問題ありませんが、私の人生では、これを機能させて URL の一部を置き換える方法がわかりません。たとえば、私が欲しい:

redirectUri: "http://the.old.domain.name.com/oauth2callback.html",

することが:

redirectUri: "http://myDomain.com/oauth2callback.html", 

私はこれがうまくいくと思います:

replacementString1="s/(?<=redirectUri: \"http:\/\/).*(?=\/oauth2callback.html)/${GATEWAYURL}/;"

ただし、次のエラーが表示されます。

Substitution pattern not terminated at -e line 1.

URL の // と / をエスケープする他の方法をたくさん試しましたが、正しく動作しないようです。

4

2 に答える 2

2
sed -i "s#http://[^/]*#http://$GATEWAYURL#" $CONFIGFILE 
于 2013-09-30T05:14:43.037 に答える
0

問題は、シェルが perl ラインで期待どおりに動作しないことです。

そのまま、replacementString1 を置換し、それを解析して perl に渡す引数にします。そのため、perl の -e は引数としてスペース文字までしか取得しません。

シェルに単一の引数として扱わせるには、単純に二重引用符を追加します。

perl -pi -e "$replacementString1" $CONFIGFILE
于 2013-09-30T07:39:33.520 に答える