Замена строки на Perl из Makefile - PullRequest
0 голосов
/ 15 ноября 2011

Я пытаюсь заменить строку внутри файла на perl из Makefile.

InstallTo = $(PWD)/WebTest

BuildApache:
    mkdir -p WebTest
    cd Source/httpd; ./configure --prefix=$(InstallTo) --exec-prefix=$(InstallTo)
    cd Source/httpd; make; make install
    cd $(InstallTo)/conf; perl -pi -e 's/ServerRoot \"$(InstallTo)\"/ServerRoot/g' httpd.conf
    cd $(InstallTo)/conf; cp -f httpd.conf httpd.conf.orig

Я не совсем уверен, что я делаю, я простопопытался изменить строку perl из того, что я нашел в сети.Я думаю, что "это все портит, но я не знаю достаточно о Perl, чтобы это исправить.

Ответы [ 2 ]

2 голосов
/ 15 ноября 2011

Возможно, вы захотите попробовать:

s|ServerRoot "$(InstallTo)"|ServerRoot|g

Вы вставляете значение с косой чертой в качестве части поискового выражения. Это заканчивается как:

s/ServerRoot \"PWD/WebTest\"/ServerRoot/g

(Где PWD обозначает буквальную спецификацию каталога.) Поскольку вы не можете избежать косой черты, это всегда будет проблемой, если вы не используете альтернативный разделитель.

0 голосов
/ 15 ноября 2011

Поскольку ваша переменная содержит '/', вам нужно использовать другой символ для регулярных выражений, также вы можете захотеть использовать quotemeta или \ Q .. \ E в регулярных выражениях, имеющих переменные, которые могут содержать специальныесимволы

s#\QServerRoot "$(InstallTo)"\E#ServerRoot#g

Подробнее об этом см. в этом сообщении how-do-i-handle-special-символов-in-a-perl-regex

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...