gpt4 book ai didi

perl - 如何在较大的 Perl 字符串中找到并增加一个数字?

转载 作者:行者123 更新时间:2023-12-01 09:08:55 25 4
gpt4 key购买 nike

我有类似的字符串

INSERT INTO `log_action` VALUES (1,'a',1,4),(2,'a',1,1),(3,'a',4,4),(4,'a',1,1),(5,'a',6,4);

我想为每个第一个值添加一个数字,所以它变成(当值为 10 时)

INSERT INTO `log_action` VALUES (11,'a',1,4),(12,'a',1,1),(13,'a',4,4),(14,'a',1,1),(15,'a',6,4);

我试过了

#!/usr/bin/perl -w
use strict;
my $input;
if ($#ARGV == 0) {
$input = $ARGV[0];
} else {
print "Usage: test.pl filename\n\n";
die "Wrong number of arguments.\n";
}
my $value;
$value = 10;
open(FILE, '<', $input) or die $!;
foreach my $line (<FILE>) {
if ($line =~ m/^INSERT INTO \`log_action\` VALUES/) {
$line =~ s/\((\d+),/\($1+$value,/ge;
print $line . "\n";
}
}
close FILE;

由于 \($1+$value, 而失败。\(, 就在那里,因为搜索会吃掉那些.

有什么解决方法的建议吗?

最佳答案

你几乎在那里,但是你放在 s///e 的替换部分的部分需要是有效的 Perl。您正在评估 Perl 代码:

my $string =<<HERE;
INSERT INTO `log_action` VALUES
(1,'a',1,4),(2,'a',1,1),(3,'a',4,4),(4,'a',1,1),(5,'a',6,4);
HERE

my $value = 10;
$string =~ s/\((\d+),/ '(' . ($1+$value) . ',' /ge;
print "$string\n";

/e 计算的 Perl 代码只是一个字符串连接:

 '(' . ($1+$value) . ','

但是,当我想匹配不想替换的部分字符串时,我使用 lookarounds所以这些部件不是替换的一部分:

my $string =<<HERE;
INSERT INTO `log_action` VALUES
(1,'a',1,4),(2,'a',1,1),(3,'a',4,4),(4,'a',1,1),(5,'a',6,4);
HERE

my $value = 10;
$string =~ s/ (?<=\() (\d+) (?=,) / $1+$value /xge;
print "$string\n";

关于perl - 如何在较大的 Perl 字符串中找到并增加一个数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3521774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com