sed: -e 표현식 #3, 문자 59: 's'에 대한 알 수 없는 옵션

sed: -e 표현식 #3, 문자 59: 's'에 대한 알 수 없는 옵션

C++ 코드에서 세 줄의 입력을 바꾸는 스크립트를 작성 중입니다. 입력을 변경하려는 C++ 코드 조각은 다음과 같습니다.

char outputFileName_ForBlueEdge[50] = "BlueEdge_SetA_PeriodRange1.dat"; //File with model parameters on the blue edge
    char outputFileName_ForPositiveGrowthModels[50] = "PostiveGrowth_SetA_PeriodRange1.dat"; //File with model parameters that have positve growth rates
    char log_directory_prefix[30] = "LOGS_A/LOGS_A"; //Prefix to log_directory, suffix is model number. This is where LINA file should be

다음은 Bash 스크립트의 재현 가능한 최소 버전입니다.

dir=$PWD
cplusplus_plotter="$dir"/BlueEdge_Plotter_V7.cpp

#Set B
  sed -i \
    -e "s/^\([[:blank:]]*char outputFileName_ForBlueEdge[50]\).*/\1 = "BlueEdge_SetB_PeriodRange1.dat"/i" \
    -e "s/^\([[:blank:]]*char outputFileName_ForPositiveGrowthModels[50]\).*/\1 = "PostiveGrowth_SetB_PeriodRange1.dat"/i" \
    -e "s/^\([[:blank:]]*log_directory_prefix[30]\).*/\1 = "LOGS_B/LOGS_B"/i" \
    "$cplusplus_plotter"

그러나 C++ 파일은 변경되지 않으며 계속해서 오류가 발생합니다.

sed: -e expression #3, char 59: unknown option to `s'

답변1

이와 같이:

  sed -i \
    -e 's/^\([[:blank:]]*char outputFileName_ForBlueEdge\[50\]\).*/\1 = "BlueEdge_SetB_PeriodRange1.dat"/i' \
    -e 's/^\([[:blank:]]*char outputFileName_ForPositiveGrowthModels\[50\]\).*/\1 = "PostiveGrowth_SetB_PeriodRange1.dat"/i' \
    -e 's!^\([[:blank:]]*log_directory_prefix\[30\]\).*!\1 = "LOGS_B/LOGS_B"!i' \
    "$cplusplus_plotter"

원하는 구분 기호를 선택할 수 있습니다(ASCII 테이블에서).

!4 가 있으므로 마지막 sed 명령을 선택했습니다 /.

관련 정보