sed保留数字并丢弃扩展名

时间:2018-12-04 08:51:34

标签: sed

我有一个文件,其中的行标题包含以下模式(制表符分隔)

1.mapped.bam 2.mapped.bam 3.mapped.bam ....

我想要

SAMPLE_1 SAMPLE_2 SAMPLE_3 .....

我尝试过:

sed -r 's/([0-9])(.mapped.bam)/SAMPLE_\1/g 

但是得到了

1SAMPLE_1 2SAMPLE_2 3SAMPLE_3 ???

1 个答案:

答案 0 :(得分:1)

您可以使用以下POSIX ERE解决方案:

sed -E 's/([0-9]+)\.mapped\.bam/SAMPLE_\1/g'

等效的BRE POSIX解决方案是

sed 's/\([0-9][0-9]*\)\.mapped\.bam/SAMPLE_\1/g'

请参见online sed demo

在这里

  • ([0-9]+)-第1组(后来在RHS中用\1占位符表示,替换模式):一位或多位数字
  • \.mapped\.bam-文字.mapped.bam子字符串。

请注意,在POSIX BRE和ERE中,都必须对括号表达式之外的点进行转义以匹配文字点,并且必须以POSIX BRE风格对捕获括号进行转义。