在文件中,我必须替换
.L1 to L_xx_1
.L2 to L_xx_2
.L3 to L_xx_3
...
和
.LC1 to LC_xx_1
.LC2 to Lc_xx_2
.LC3 to LC_xx_3
...
对于这两个搜索和替换,我有两个不同的Perl脚本,其中包含以下两个不同的循环:
for ($i=0; $currentLine=<file>; $i++) {
$currentLine =~ s/.L(\d+)/L_$ARGV[1]_$1/gi;
print $currentLine;
}
和
for ($i=0; $currentLine=<file>; $i++) {
$currentLine =~ s/.LC(\d+)/LC_$ARGV[1]_$1/gi;
print $currentLine;
}
分别。
我可以通过将两个S命令合并为一个将这两个循环合并为一个。
答案 0 :(得分:2)
是的,您可以将2个替换项与一个具有不同正则表达式的合并。您可以捕获“ L”,然后是可选的“ C”。
use warnings;
use strict;
my $str = 'xx';
while (my $currentLine = <DATA>) {
$currentLine =~ s/\.(LC?)(\d+)/$1_${str}_$2/gi;
print $currentLine;
}
__DATA__
.L1
.L2
.L3
.LC1
.LC2
.LC3
此打印:
L_xx_1
L_xx_2
L_xx_3
LC_xx_1
LC_xx_2
LC_xx_3
请注意,我转义了第一个字符(句点)。这只会匹配一个字面量。
答案 1 :(得分:1)
将正则表达式修改为
$currentLine =~ s/\.L(C?)(\d+)/L$1_$ARGV[1]_$2/gi;