我有一个格式如下的文件:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9558 9629 gene
locus_tag CeraR_t011
gene trnR-UCU
11296 9773 CDS
locus_tag CeraR_p012
gene atpA
product ATP synthase CF1 alpha subunit
transl_except (pos:complement(10268..10270), aa:Q)
transl_except (pos:complement(11192..11194), aa:Q)
transl_except (pos:complement(13267..13269), aa:M)
11296 9773 gene
locus_tag CeraR_p012
gene atpA
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我需要在每个实例中的pos:complement之后的两个值中添加809。我一直在尝试使用搜索和替换修饰符:
$line =~ s!complement((\d+)..(\d+)!complement(($1+809)..($2+809)!eg
然而,(补语之后总是被解释为评价的一部分,而不仅仅是一个字符。我已经尝试了反斜杠,撇号和引号的每一个组合,使它只是一个字符,但似乎没有任何效果。
任何建议都将不胜感激
答案 0 :(得分:1)
由于评估了替换字符串,因此必须使用带引号的字符串和连接:
$line =~ s/complement\(\K(\d+)..(\d+)/($1+809) . '..' . ($2+809)/eg;
注意:由于\K
会从匹配结果中删除左侧的所有内容,因此您无需在替换字符串中重写匹配的所有开头。