在一个正则表达式操作中,是否有办法将正则表达式替换为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 's/\_L(\d{3})/\_$1+1/;print'
答案 0 :(得分:3)
您需要在正则表达式上使用/e
来指定“评估”。
但是,如果您这样做,则是在进行评估,因此您不能再使用裸字了。 \_1+1
无效。您可以做$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