2011-04-26 62 views
2

本質上,我想創建一個腳本來部署數據庫連接腳本來託管SVN分支。Perl /正則表達式:編輯文件中的一行

模板文件看起來像

//comments 
//comments 
//comments 
//$db="user:[email protected]/###branchdb###"; 
//other stuff 

基本上我想:

  1. 查找### branchdb ###
  2. 行刪除在所涉及的起動的評論line'//'
  3. 用腳本參數替換### branchdb ###

這個腳本是基於Perl的,所以我想我想用Perl來完成這個任務,儘管我知道Bash/Linux環境也提供了很多工具來完成這個任務,所以如果我需要使用它們,它。

我還假設我需要使用一些正則表達式的這個?也許不是,但是我肯定喜歡像正則表達式一樣對我來說是一個不變的失敗點,所以我可以嘗試更多的藉口,讓我的腦袋變得更好:)

感謝您的幫助!

完整的解決方案與下面韋斯的幫助:

open IN, $sourceFile or die "Can't open $sourceFile"; 
open OUT, ">$destinationFile" or die "Can't write to $destinationFile"; 

while(<IN>) { 
    if ($_ =~ m/%BRANCH_DB%/) { 
    $_ =~ s!^\s*//!!; 
    $_ =~ s/%BRANCH_DB%/$branch/; 
    } 
    print OUT $_; 
} 

close(IN); 
close(OUT); 

我也改變了### branchdb ###至%BRANCH_DB%,因爲我被告知這是一個比較常見的佔位符。

回答

1
$_ =~ s/\/\/(.*)###branchdb###/\1$arg/ 
+0

非常感謝!我認爲你假設我知道的比我應該多,我還需要額外的文件閱讀/寫作毛病,但最終我到了那裏。 – DanH 2011-04-26 08:28:37

1

從命令行直接。

(ol)[email protected]% more test 
//comments 
//comments 
//comments 
//$db="user:[email protected]/###branchdb###"; 

(ol)[email protected]% perl -p -i -e 's!^//(.*)###branchdb###!$1mynewbranchname!g' test 
(ol)[email protected]% more test 
//comments 
//comments 
//comments 
$db="user:[email protected]/mynewbranchname"; 
//other stuff 
+0

對不起。我誤解了你的問題,並刪除了所有行中的評論字符。我現在修好了。 – 2011-04-26 07:33:46

+0

當我在現有的perl腳本中運行腳本時,一行腳本並不完全符合我的要求:)。儘管謝謝你仍然有用! – DanH 2011-04-26 08:27:17

+0

不客氣。 – 2011-04-26 08:32:34