我正在使用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",
一切都很好,但对于我的生活,我无法弄清楚如何让这个工作来取代部分网址。例如,我想:
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.
我尝试了一些其他方法来逃避//和/中的网址,但似乎无法使其正常工作。
答案 0 :(得分:2)
sed -i "s#http://[^/]*#http://$GATEWAYURL#" $CONFIGFILE
答案 1 :(得分:0)
您的问题是shell没有按照您对perl行的期望进行操作。
按原样,它替换replacementString1,然后将其解析为参数以传递给perl,这样perl的-e只能将空格字符作为参数。
要强制shell将其视为单个参数,只需添加双引号:
perl -pi -e "$replacementString1" $CONFIGFILE