【问题标题】:String replacement with Perl from inside a Makefile从 Makefile 中用 Perl 替换字符串
【发布时间】:2011-11-16 01:58:34
【问题描述】:

我正在尝试用 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 的了解还不够,无法修复它。

【问题讨论】:

    标签: perl makefile


    【解决方案1】:

    你可能想试试:

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

    您将粘贴一个带有斜杠的值作为搜索表达式的一部分。结果是:

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

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

    【讨论】:

      【解决方案2】:

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

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

      更多详情请参考这篇文章how-do-i-handle-special-characters-in-a-perl-regex

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-21
        • 2014-10-06
        • 2022-01-08
        • 2013-03-08
        • 2015-10-11
        • 2014-12-03
        • 1970-01-01
        相关资源
        最近更新 更多