1

我正在使用一个 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

您的问题是 shell 没有按照您对 perl 行的期望进行操作。

照原样,它正在替换 replacementString1,然后将其解析为参数以传递给 perl,因此 perl 的 -e 仅将空格字符作为参数。

要强制 shell 将其视为单个参数,只需添加双引号:

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