使用Perl以增量方式替换同一行中的数字
我有一些这样的XML数据使用Perl以增量方式替换同一行中的数字,perl,Perl,我有一些这样的XML数据 <!--Q1: some text--><!--Q1: some text--><!--Q1: some text--> s/(<!--Q)\d+/$1.++$n/ge; 我想按这样的顺序替换这个查询号 <!--Q1: some text--><!--Q2: some text--><!--Q3: some text-->.. 。。 我写了这个Perl脚本 #!/usr/bin/p
<!--Q1: some text--><!--Q1: some text--><!--Q1: some text-->
s/(<!--Q)\d+/$1.++$n/ge;
我想按这样的顺序替换这个查询号
<!--Q1: some text--><!--Q2: some text--><!--Q3: some text-->..
。。
我写了这个Perl脚本
#!/usr/bin/perl -w
$b=1;
use strict;
open(FILE, "<text.xml") || die "File not found";
my @lines = <FILE>;
close(FILE);
my @newlines;
while<> {
$_ =~ s/<!--Q[0-9]{1,2}/<!--Q$b/g;
$b++;
push(@newlines,$_);
}
open(FILE, ">text.xml") || die "File not found";
print FILE @newlines;
#/usr/bin/perl-w
$b=1;
严格使用;
打开(文件“您的程序有许多问题
- 必须始终
使用strict
和使用warnings
作为程序的第一行
- 您应该使用词汇文件句柄(标量变量)而不是全局名称
- 如果
open
失败,则应使用open
的三参数形式,并在die
字符串中包含内置变量$!
- 千万不要使用
$a
或$b
作为变量名。它们根本无助于记录程序,perl在内部使用它们,因此不能依赖它们的内容
- 您已将整个文件读取到
@行中
,然后希望在while
循环中可以读取更多内容。您已经到达了文件的末尾,因此不会进入循环
- 在
更新
如果您没有可用的Perl5版本10(而且您真的应该——它已经有六年的历史了,并且是一个主要的更新),那么您可以这样编写正则表达式
<!--Q1: some text--><!--Q1: some text--><!--Q1: some text-->
s/(<!--Q)\d+/$1.++$n/ge;
s/(@Kenosis:诡异:我以为那是一个工作程序的直接复制/粘贴。我想我在上次运行后对它进行了修补。感谢您的帮助。非常欢迎。只返回您给我的一点帮助。如何为文件夹中的所有*.xml文件运行此脚本?
<!--Q1: text-->
<!--Q2: text--><!--Q3: text-->
<!--Q4: text-->
s/(<!--Q)\d+/$1.++$n/ge;