Поиск и замена определенной строки в файле с использованием 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
, который является просто копией исходного файла.