perl正则表达式替换从就地匹配增加数值
有没有办法在一个正则表达式操作中用Perl中增加的+1或+2值替换正则表达式中的值?例如,将L001更改为L002或L003或L004的内容如下: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
$ 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