2013-09-29 4 views
1

파일의 두 문자열 사이의 특정 텍스트를 대체하는 bash 스크립트를 사용하고 있습니다.URL 부분을 bash로 바꾸기

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

봐 이런 :이이처럼 보이는 파일의 라인을 만들기 위해 좋은 작품

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

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

perl -pi -e $replacementString1 $CONFIGFILE 

: 그것은 다음과 같습니다

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에서는 작동하지만 제대로 작동하지 않는 것 같습니다.

+0

당신은'GATEWAYURL'를 정의하지만 분명히 그것은 이스케이프 슬래시를 포함하는 방법을 표시하지 않습니다. 가장 간단한 해결 방법은 텍스트에없는 구분 기호를 사용하는 것입니다. @ EranBen-Natan의 답은'sed'로 이것을 보여 주지만 Perl에서도 같은 구문을 사용할 수 있습니다. – tripleee

답변

0

당신의 문제는 쉘이 펄 라인에서 기대하는대로하지 않는 것입니다.

대체로 replacementString1을 대체 한 다음 인수를 구문 분석하여 perl로 전달하므로 perl의 -e는 인수로만 공백 문자를 인식합니다.

단순히 따옴표를 추가, 하나의 인자로 처리하는 쉘을 강제로 :

perl -pi -e "$replacementString1" $CONFIGFILE 
2
sed -i "s#http://[^/]*#http://$GATEWAYURL#" $CONFIGFILE