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
27.06.2020, 01:26
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 ).

Я выбрал !в последней команде sed, потому что у вас было 4 /.

1
18.03.2021, 23:23

Теги

Похожие вопросы