这是我的代码。我希望提取部分文本并写入另一个文件。代码循环不会在我选择的文本范围内停止。它一直读到单词的最后一个匹配行。请给我提意见。谢谢。例如,我需要提取 $ NAME: sandy 直到 $$.TO ,然后加入 $NAME: patrick 中的内容,从 G1 开始直到 $$SRU。
文本:
$ NAME : corry
$$.Inc s d
$$.Oc s
$$.TO
G1 ty n1 EE EE M T1 T2 $$SRU
G2 n1 y OO OO M T3 T4 $$SRU
$$.EON
$ NAME : patrick
$$.Inc c d
$$.Oc c
$$.TO
G1 td n3 EE EE M T5 T6 $$SRU
G2 n3 y OO OO M T7 T8 $$SRU
$$.EON
$ NAME : sandy
$$.Inc k l
$$.Oc l
$$.TO
G1 td n3 FF FF M R5 R6 $$SRU
G2 n3 y OO OO N R7 R8 $$SRU
$$.EON
输出:例如。
$ NAME : sandy #from sandy section
$$.Inc k l #sandy
$$.Oc l #sandy
$$.TO #sandy
G1.G1o.n ty n1 EE EE M T1 T2 $$SRU #from Patrick section
G2.G2o.n n1 y OO OO M T3 T4 $$SRU #Patrick
Fe.id.n ty n1 EE EE N T1 T2 $$SRU #corry
Fr.in.p n1 y OO OO N T3 T4 $$SRU #corry
$$.EON #Patrick
代码:
use strict;
use warnings;
open my $F1, '<', 'testing.txt' or die "failed $!";
open my $F2, '>', 'out.txt' or die "failed $!";
while (<$F1>) {
if (/^\$ NAME : sandy/../\$.TO/) {
print $F2 $_;
}
if (/^\$ NAME : patrick/../\$.EON/) {
if(/^G1/../\$SRU/){
s/G1/G1.G1o.n/g;
print $F2 $_;}
}
}
close $F1;
close $F2;