从 Makefile 内部使用 Perl 进行字符串替换

发布于 2024-12-16 12:21:11 字数 485 浏览 0 评论 0原文

我正在尝试用 Makefile 中的 perl 替换文件中的字符串。

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 的了解还不够多,无法修复它。

I'm trying to replace a string, inside of a file, with perl from inside a 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

I'm not sure exactly what I'm doing though, I've just tried to modify the perl line from something I found on the net. I think its the \" thats messing things up but I don't know enough about Perl to fix it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

无声静候 2024-12-23 12:21:11

您可能想尝试:

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

您正在粘贴一个带有斜线的值作为搜索表达式的一部分。它最终是:(

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

其中 PWD 代表任何文字目录规范。)由于您无法转义斜杠,因此除非您使用替代分隔符,否则这总是一个问题。

You might want to try:

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

You're pasting a value with a slash in it as part of the search expression. It ends up as:

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

(Where PWD stands for any literal directory spec.) Since you can't escape the slash, that's always going to be a problem unless you use an alternative delimiter.

聚集的泪 2024-12-23 12:21:11

由于您的变量包含“/”,您需要对正则表达式使用不同的字符,您也可能需要使用 quotemeta 或 \Q..\E 正则表达式中的变量可以包含特殊字符

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

请参阅这篇文章了解更多详细信息 how-do-i-handle-special-characters-in- a-perl-正则表达式

Since your variable contains '/' you need to use a different character for regular expressions, also you may want to use quotemeta or \Q..\E in regular expressions having variables which can contain special characters

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

Refer to this post for more details how-do-i-handle-special-characters-in-a-perl-regex

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文