파일의 문자열을 다른 문자열로 바꾸기

파일의 문자열을 다른 문자열로 바꾸기

AIX 6.1에서 "FULL_RUN_SCRIPT_DIR" 문자열을 모두 "/etc/rc.d/.."와 같은 경로로 바꾸려고 합니다.

이것은 코드입니다

        SEE_FILE_PATH="$INIT_DIR$SERVICE_NAME"
        FULL_RUN_SCRIPT_DIR="FULL_RUN_SCRIPT_DIR"
        SERVICE_FILE="$INIT_DIR$SERVICE_NAME"
        echo "String1:$FULL_RUN_SCRIPT_DIR"
        echo "String2:$SEE_FILE_PATH"
        echo "String3:$SERVICE_FILE"

        perl -p -i -e "s/$FULL_RUN_SCRIPT_DIR/$SEE_FILE_PATH/g" "$SERVICE_FILE"

하지만 오류가 발생합니다.

String1:FULL_RUN_SCRIPT_DIR
String2:/etc/rc.d/init.d/seelinkdeployer
String3:/etc/rc.d/init.d/seelinkdeployer
Bareword found where operator expected at -e line 1, near "s/FULL_RUN_SCRIPT_DIR//etc"
syntax error at -e line 1, near "s/FULL_RUN_SCRIPT_DIR//etc"
Execution of -e aborted due to compilation errors.

어떤 아이디어가 있나요?

답변1

뭔가 잘못되었다는 첫 번째 힌트는 다음과 같은 경우입니다.

...near "s/FULL_RUN_SCRIPT_DIR//etc"

...다음과 유사한 표현이 필요할 때

...near "s/FULL_RUN_SCRIPT_DIR//etc/rc.d/init.d/seelinkdeployer/g"

...전체 가치가 있습니다 $SEE_FILE_PATH.

문제는 Perl 연산자에서 /검색 텍스트와 s//대체 텍스트를 구분하기 위해 슬래시를 사용하고 있으며 적어도 대체 텍스트에 슬래시가 있다는 것입니다.

여러 가지 옵션이 있습니다:

  1. 에서 슬래시를 구분 기호로 사용하지 마십시오 s//. 검색 텍스트를 사용하거나 텍스트에 없는 내용을 바꾸십시오. 예를 들어, ~:

    perl -p -i -e "s~$FULL_RUN_SCRIPT_DIR~$SEE_FILE_PATH~g" "$SERVICE_FILE"
    
  2. 검색 및/또는 대체 텍스트에서 이스케이프된 슬래시를 슬래시로 바꿉니다( //매개변수 확장이 bash와 유사한 쉘을 사용한다고 가정).

    SEE_FILE_PATH=/etc/rc.d/init.d/seelinkdeployer
    SEE_FILE_PATH=${SEE_FILE_PATH//\//\\/}
    

추가 자료:

관련 정보