2011-11-15 33 views
0

我試圖用Makefile中的perl替換文件內部的字符串。使用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來修復它

回答

2

你可能會想嘗試:

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

你粘貼值與斜槓它作爲搜索表達式的一部分它結束瞭如:

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

(其中PWD代表任何文本目錄規範)因爲你無法逃避的斜線,這總是會除非你使用是一個問題另一個分隔符。

0

由於您的變量包含「/」,你需要使用正則表達式一個不同的角色,你也可能要使用quotemeta或\ Q ...。\ E正則表達式中可以包含特殊字符

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

詳情請參閱這個帖子how-do-i-handle-special-characters-in-a-perl-regex