여러 줄 sed 스크립트 오류: 개행 문자를 문자열 구분 기호로 사용할 수 없습니다.

여러 줄 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' \
      ./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)변수 이름에 허용되는 문자에 대해 약간 더 엄격하지만 작은 따옴표는 신경 쓰지 않음).

관련 정보