Perl / Regex:编辑文件中的一行

时间:2011-04-26 07:24:37

标签: regex perl

基本上我想创建一个脚本来部署数据库连接脚本来托管SVN分支。

模板文件类似于

//comments
//comments
//comments
//$db="user:pass@host/###branchdb###";
//other stuff

基本上我想:

  1. 按### branchdb ###
  2. 查找该行
  3. 删除第'//'
  4. 行开头的评论
  5. 用脚本参数
  6. 替换### branchdb ###

    这个脚本是基于Perl的,所以我想我想用Perl完成这个任务,虽然我知道Bash / Linux环境提供了很多工具来完成这个,所以如果我需要使用那些那么是的。

    我还假设我需要为此使用一些正则表达式?也许不是,但是我当然希望因为正则表达式对我来说是一个不变的失败点所以我可以尝试更多的借口让我更好地解决它:)

    感谢您的帮助!

    以下Wes帮助的完整解决方案:

    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%,因为我被告知这是一个更常见的占位符。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

直接从命令行。

(ol)noufal@sanitarium% more test
//comments
//comments
//comments
//$db="user:pass@host/###branchdb###";

(ol)noufal@sanitarium% perl -p -i -e 's!^//(.*)###branchdb###!$1mynewbranchname!g' test
(ol)noufal@sanitarium% more test
//comments
//comments
//comments
$db="user:pass@host/mynewbranchname";
//other stuff