使用Perl搜索并替换文件中的特定字符串

cr8*_*ith 18 perl

可能重复:
如何替换Perl中现有文件中的字符串?

我需要创建一个在文件中进行搜索和替换的子例程.

这是myfiletemplate.txt的内容:

CATEGORY1=youknow_<PREF>  
CATEGORY2=your/<PREF>/goes/here/
Run Code Online (Sandbox Code Playgroud)

这是我的替换字符串: ABCD

我需要更换的所有实例<PREF>ABCD

Tot*_*oto 41

一个班轮:

perl -pi.back -e 's/<PREF>/ABCD/g;' inputfile
Run Code Online (Sandbox Code Playgroud)

  • 其他人都在想,`.back`会创建备份文件.你可以删除它. (2认同)

Eri*_*rik 22

又快又脏:

#!/usr/bin/perl -w

use strict;

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

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

open(FILE, ">/tmp/yourfile.txt") || die "File not found";
print FILE @lines;
close(FILE);
Run Code Online (Sandbox Code Playgroud)

也许最好不要将结果写回原始文件; 而是将其写入副本并首先检查结果.

  • 无需将数据推送到另一个阵列.您可以就地修改`@ lines`. (4认同)
  • 包括$!在die消息中,`die'文件找不到$!";`帮助我找到了之前的错误. (3认同)

can*_*nin 16

你也可以这样做:

#!/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
}
Run Code Online (Sandbox Code Playgroud)

用by调用脚本

./script.pl input_file
Run Code Online (Sandbox Code Playgroud)

您将获得一个名为input_file(包含您的更改)的文件和一个名为的文件input_file.bak,该文件只是原始文件的副本.