sed
이 명령을 작동시키려고 합니다 .
sed -e \
's|$API_URL|$(API_URL)|g ; \
s|$API_KEY|$(API_KEY)|g ; \
s|$API_SECRET|$(API_SECRET)|g ; \
s|$API_SALT|$(API_SALT)|g ; \
s|$STORAGE_FUNCTION|$(STORAGE_FUNCTION)|g ; \
s|$STORAGE_ACCOUNT|$(STORAGE_ACCOUNT)|g ; \
s|$STORAGE_CONTAINER|$(STORAGE_CONTAINER)|g' \
./src/environments/environment.template.ts > ./src/environments/environment.ts
파일의 자리 표시자를 바꾸겠습니다.
export const environment = {
api: {
url: '$API_URL',
key: '$API_KEY',
secret: '$API_SECRET',
salt: '$API_SALT'
}
};
하지만 다음 오류가 발생합니다.
개행 문자는 문자열 구분 기호로 사용할 수 없습니다.
답변1
실제 오류는 줄 주소로 사용될 때 구분 기호 앞에 백슬래시를 추가하여 정규식을 임의의 구분 기호로 구분할 수 있다는 사실에서 비롯됩니다.
\@hello@d
이렇게 하면 정규식과 일치하는 모든 줄이 삭제됩니다 hello
.
/hello/d
회의.
그러나 개행 문자는 이런 방식으로 구분 기호로 사용할 수 없습니다. 따라서 오류가 발생했습니다.
sed
개행 문자는 모두 작은따옴표로 묶인 문자열 안에 있으므로 스크립트는 개행 문자를 이스케이프할 필요가 없습니다 . \
실제 편집 스크립트의 각 줄 끝에서 다음을 제거합니다 sed
.
sed -e 's|$API_URL|$(API_URL)|g
s|$API_KEY|$(API_KEY)|g
s|$API_SECRET|$(API_SECRET)|g
s|$API_SALT|$(API_SALT)|g
s|$STORAGE_FUNCTION|$(STORAGE_FUNCTION)|g
s|$STORAGE_ACCOUNT|$(STORAGE_ACCOUNT)|g
s|$STORAGE_CONTAINER|$(STORAGE_CONTAINER)|g' \
infile >outfile
명령문 은 ;
개행 문자로 대체됩니다. 예를 들어 in 과 같이 같은 줄을 차지하는 명령문 사이에만 필요합니다 G;s/\n/ /
.
또는:
sed -e 's|$API_URL|$(API_URL)|g' \
-e 's|$API_KEY|$(API_KEY)|g' \
-e 's|$API_SECRET|$(API_SECRET)|g' \
-e 's|$API_SALT|$(API_SALT)|g' \
-e 's|$STORAGE_FUNCTION|$(STORAGE_FUNCTION)|g' \
-e 's|$STORAGE_ACCOUNT|$(STORAGE_ACCOUNT)|g' \
-e 's|$STORAGE_CONTAINER|$(STORAGE_CONTAINER)|g' \
infile >outfile
또는,
sed "s/'\\$\([^']*\)'/'\$(\1)'/g" infile >outfile
처럼 보이는 '$something Whatever'
것은 무엇 이든 교체하세요 '$(something Whatever)'
.
또는,
sed 's/$\([A-Z_]*\)/$(\1)/g' infile >outfile
다음과 같은 것으로 바꾸십시오 $SOME_THING
( $(SOME_THING)
변수 이름에 허용되는 문자에 대해 약간 더 엄격하지만 작은 따옴표는 신경 쓰지 않음).