我可以使用search和replace在Perl中插入累进数吗?
我很抱歉,如果这个问题听起来很愚蠢的话,但是我已经搜索了很多,到现在为止,我一天中大部分时间都在做一件相当琐碎的工作 我需要将递增编号的ID插入到文本文件中。文件中已经有占位符,因此我倾向于使用搜索和替换。我只能做到以下几点:我可以使用search和replace在Perl中插入累进数吗?,perl,replace,Perl,Replace,我很抱歉,如果这个问题听起来很愚蠢的话,但是我已经搜索了很多,到现在为止,我一天中大部分时间都在做一件相当琐碎的工作 我需要将递增编号的ID插入到文本文件中。文件中已经有占位符,因此我倾向于使用搜索和替换。我只能做到以下几点: #!/usr/bin/perl my $counter = 1; my $oldID = "docID=\""; my $newID = "docID=\"14$counter"; #should the return the IDs 141, 142, 143 ...
#!/usr/bin/perl
my $counter = 1;
my $oldID = "docID=\"";
my $newID = "docID=\"14$counter"; #should the return the IDs 141, 142, 143 ...
open (FILE, "file.txt") || die $!;
@content = <FILE>;
foreach (@content){
s/$oldID/$newID/;
$counter++;
}
open (OUT, ">file_ID.txt") || die $!;
print OUT @content;
close OUT;
close(FILE);
print = "$counter" #this is to test if the counter is working.
#/usr/bin/perl
我的$counter=1;
我的$oldID=“docID=\”;
my$newID=“docID=\”14$counter”#如果返回ID 141142143。。。
打开(文件,“FILE.txt”)| | die$!;
@内容=;
foreach(@content){
s/$oldID/$newID/;
$counter++;
}
打开(OUT,“>file_ID.txt”)| | die$!;
打印内容;
收尾;
关闭(文件);
print=“$counter”#用于测试计数器是否工作。
这将查找并替换docID=“”。不幸的是,它用141取代了docID的所有出现
我想这是行不通的,因为所有发生的事情都被一次替换掉了,计数器永远也没有机会变大。然而,如果我看到$counter增长过大,这看起来就不太可能了。这正好是docID发生次数的12倍
我相信我需要让perl只替换docID的一次出现,然后提高计数器,然后在循环中执行此操作,直到文档结束
谁能帮我一下吗?我将非常感激
Thx
Iuliusperl regexp支持“eval”,您可以执行以下操作:
s/$oldId/"docid=\"" . $newId++ . "\""/e
其中/e是每次调用都对替换进行eval的eval部分。perl regexps支持“eval”,因此您可以执行以下操作:
s/$oldId/"docid=\"" . $newId++ . "\""/e
其中/e是每次调用都对替换进行求值的求值部分。在代码中,可以在for循环中移动$newID变量:
foreach (@content){
my $newID = "docID=\"14$counter";
s/$oldID/$newID/;
$counter++;
}
在代码中,可以在for循环中移动$newID变量:
foreach (@content){
my $newID = "docID=\"14$counter";
s/$oldID/$newID/;
$counter++;
}
打开我的$in'、'file_ID.txt'或死“$!opening output”;
我的$counter=141;
而(){
s/docID=“/q{docID=“}.$counter++/eg;
打印$out$;
}
使用s///e
在找到实例时替换并递增计数器,并逐行处理文件,而不是将其全部读入内存并重新写入,因为没有真正的理由这样做。打开我的$in、、'file_ID.txt'或死“$!opening output”;
我的$counter=141;
而(){
s/docID=“/q{docID=“}.$counter++/eg;
打印$out$;
}
使用s///e
在找到实例时替换并递增计数器,并逐行处理文件,而不是将其全部读入内存并再次将其全部写出来,因为没有真正的理由这样做