Perl / Regex: редактировать строку в файле - PullRequest
2 голосов
/ 26 апреля 2011

По сути я хочу создать сценарий для развертывания сценария подключения к базе данных для размещения ветвей SVN.

Файл шаблона выглядит примерно так:

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

В основном я хочу:

  1. Найдите строку по ### branchdb ###
  2. Удалить комментарии в начале строки '//'
  3. Заменить ### branchdb ### аргументом скрипта

Скрипт основан на Perl, так что, думаю, я бы хотел выполнить эту задачу с помощью Perl, хотя я понимаю, что Bash / Linux Environment предоставляет множество инструментов для достижения этой цели, поэтому, если мне нужно их использовать, будь это.

Я также предполагаю, что мне понадобится некоторое количество регулярных выражений для этого? Возможно, нет, однако я бы, конечно, хотел, так как регулярное выражение является постоянной точкой отказа для меня, поэтому, чем больше у меня будет оправданий, чтобы попытаться обдумать это, тем лучше:)

Спасибо за любую помощь!

Полное решение с помощью Уэса:

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 ]

1 голос
/ 26 апреля 2011

Из командной строки напрямую.

(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
1 голос
/ 26 апреля 2011
$_ =~ s/\/\/(.*)###branchdb###/\1$arg/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...