Как использовать sed в Make-файле

Я попытался поместить следующее в свой Make-файл:

@if [ $(DEMO) -eq 0 ]; then \
    cat sys.conf | sed -e "s#^public_demo[\s=].*$#public_demo=0#" >sys.conf.temp; \
else \
    cat sys.conf | sed -e "s#^public_demo[\s=].*$#public_demo=1#" >sys.conf.temp; \
fi

но когда я работаю, делают, я получаю следующую ошибку:

sed: -e expression #1, char 30: unterminated `s' command

Если я выполняю точные строки, которые содержат sed в консоли они ведут себя правильно.

Почему я получаю эту ошибку и как проблема может быть решена?

20
задан Tom 29 June 2010 в 13:17
поделиться

3 ответа

Это может быть знак $ в подстановке, который make интерпретирует как переменную. Попробуйте использовать два из них, например . * $$ # public_demo . Затем make расширит это до одного $.

РЕДАКТИРОВАТЬ: Это была только половина ответа. Как ответил Кристис: другая часть заключается в том, что нужно использовать одинарные кавычки, чтобы bash также не расширял знак $.

26
ответ дан 30 November 2019 в 00:00
поделиться

Я предлагаю вам использовать одинарные кавычки вместо двойных, $ может быть обработан make как специальный символ перед запуском sed:

cat sys.conf | sed -e 's#^public_demo[\s=].*$#public_demo=0#' >sys.conf.temp;
7
ответ дан 30 November 2019 в 00:00
поделиться

Используйте что-то другое, кроме # , для разделения частей.

0
ответ дан 30 November 2019 в 00:00
поделиться
Другие вопросы по тегам:

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