Sed保留数字并放弃扩展名

Sed保留数字并放弃扩展名,sed,Sed,我有一个文件,其行标题包含以下模式(制表符分隔) 我想要 SAMPLE_1 SAMPLE_2 SAMPLE_3 ..... 我试过: sed -r 's/([0-9])(.mapped.bam)/SAMPLE_\1/g 但是得到 1SAMPLE_1 2SAMPLE_2 3SAMPLE_3 ??? 您可以使用以下POSIX ERE解决方案: sed -E 's/([0-9]+)\.mapped\.bam/SAMPLE_\1/g' 等效的BRE POSIX解决方案是 sed 's/\([0

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

我想要

SAMPLE_1 SAMPLE_2 SAMPLE_3 .....
我试过:

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

1SAMPLE_1 2SAMPLE_2 3SAMPLE_3 ???

您可以使用以下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'

这里,

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

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

sed-E/([0-9]+)\.mapped\.bam/SAMPLE\1/g'
应该可以工作。看。很棒的作品很好!!!虽然建议的解决方案更好,但我想知道您为什么会得到该输出,给定的命令会在
GNU sed 4.2.2
上为我生成所需的输出,您能解释一下为什么得到该输出吗?似乎还有一些代码您没有共享。如果以下解决方案有效,请将答案标记为已接受。
sed 's/\([0-9][0-9]*\)\.mapped\.bam/SAMPLE_\1/g'