Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl正则表达式替换从就地匹配增加数值_Perl - Fatal编程技术网

perl正则表达式替换从就地匹配增加数值

perl正则表达式替换从就地匹配增加数值,perl,Perl,有没有办法在一个正则表达式操作中用Perl中增加的+1或+2值替换正则表达式中的值?例如,将L001更改为L002或L003或L004的内容如下: $ echo XYZ123-123-123x_S6_L001_R1_001.fastq.gz | perl -lne '$_ =~ /\_L(\d{3})/; $new=sprintf("%03d",$1+1); s/\_L\d{3}/\_L$new/;print' XYZ123-123-123x_S6_L002_R1_001.fastq.gz

有没有办法在一个正则表达式操作中用Perl中增加的+1或+2值替换正则表达式中的值?例如,将L001更改为L002或L003或L004的内容如下:

$ echo XYZ123-123-123x_S6_L001_R1_001.fastq.gz | perl -lne '$_ =~ /\_L(\d{3})/; $new=sprintf("%03d",$1+1); s/\_L\d{3}/\_L$new/;print'

XYZ123-123-123x_S6_L002_R1_001.fastq.gz
但在regex操作中执行此操作,类似于下面的操作(不起作用):


您需要在正则表达式上使用
/e
,以指定“evaluate”

但如果你这么做,你就是在做评估,所以你不能再光说空话了<代码>\\u 1+1不是有效的perl。你可以做
$1+1
,但那只会给你
2
而不是
002

因此,您还需要
sprintf
将键盘归零

同时,您可以使用
-p
而不是
-n
来代替尾随打印

并获得:

echo XYZ123-123-123x_S6_L001_R1_001.fastq.gz | perl -pe 's/_L(\d{3})/sprintf("_L%03d",$1+1)/e'
这给了你:

XYZ123-123-123x_S6_L002_R1_001.fastq.gz
XYZ123-123-123x_S6_L002_R1_001.fastq.gz