Поиск и замена определенной строки в файле с использованием Perl

Возможный дубликат:
Как заменить строку в существующем файле на Perl?

Мне нужно создать подпрограмму, которая выполняет поиск и заменяет файл.

Здесь содержимое файла myfiletemplate.txt:

CATEGORY1=youknow_<PREF>  
CATEGORY2=your/<PREF>/goes/here/

Здесь моя строка замены: ABCD

Мне нужно заменить все экземпляры <PREF> на ABCD

Ответы

Ответ 1

Быстрая и грязная:

#!/usr/bin/perl -w

use strict;

open(FILE, "</tmp/yourfile.txt") || die "File not found";
my @lines = <FILE>;
close(FILE);

my @newlines;
foreach(@lines) {
   $_ =~ s/<PREF>/ABCD/g;
   push(@newlines,$_);
}

open(FILE, ">/tmp/yourfile.txt") || die "File not found";
print FILE @newlines;
close(FILE);

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

Ответ 2

Один вкладыш:

perl -pi.back -e 's/<PREF>/ABCD/g;' inputfile

Ответ 3

Вы также можете сделать это:

#!/usr/bin/perl

use strict;
use warnings;

$^I = '.bak'; # create a backup copy 

while (<>) {
   s/<PREF>/ABCD/g; # do the replacement
   print; # print to the modified file
}

Вызвать script с помощью

./script.pl input_file

Вы получите файл с именем input_file, содержащий ваши изменения, и файл с именем input_file.bak, который является просто копией исходного файла.