Perl实例---批量替换内容

Posted EasyPerl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Perl实例---批量替换内容相关的知识,希望对你有一定的参考价值。

我们在数据处理的时候, 有时候需要对原始的数据的部分内容进行替换, 有时候又同时有多个替换规则,那么我们需要如何来进行批量的处理呢?


我们还是通过下面的例子来看:


我们有一个原始数据文件data.txt,它的内容如下:


ACGGGCCAGGATTTCAAA


同时我们有一个替换规则的文件rule.txt, 它的内容如下:

A   a

T   t

G  g

C  c


我们来看如何处理:


读取文件

my $file = 'data.txt';

open my $fh, '<', $file or die "failed to open file:$file\n";


my $file2 = 'rule.txt';

open my $fh2, '<', $file2 or die "failed to open file:$file2\n";


我们先将所有规则读入hash

my %rules;

while(<$fh2>){

chomp;

my ($origin, $new) = split /\s+/;

next unless defined $new;

$rules{$origin} = $new;

}

close $fh2;


while(<$fh>){

        我们以此执行所有的规则, 来进行正则替换

for my $origin(keys %rules){

s/$origin/$rules{$origin}/g;

}

print $_;

}

close $fh;


这里我们需要特别注意的是, 如果我们的规则里面有冲突的规则,或者我们需要按照顺序来执行这些规则, 那么我们就不能单独使用hash了。 

我们需要做的变动就是, 同时使用一个数组来存储所有的hash的key, 最后进行直接规则的时候, 按照数组的顺序来执行。


比如, 我们有如下规则时, 就一定要当心了:

a  c

c  b 


以上是关于Perl实例---批量替换内容的主要内容,如果未能解决你的问题,请参考以下文章

linux批量替换文件夹名,文件名,文件内容命令

如何使用 Perl 进行批量搜索和替换?

用Perl regex替换批量重命名文件

Linux批量查找与替换

有没有一种简单的方法来进行批量文件文本替换?

word怎么批量替换文字