【问题标题】:Sed keep digit and discard extensionsed 保留数字并丢弃扩展名
【发布时间】:2018-12-04 16:58:41
【问题描述】:

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

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 ???

【问题讨论】:

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

标签: sed


【解决方案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 风格中必须对捕获括号进行转义。

【讨论】:

    猜你喜欢
    • 2020-09-17
    • 1970-01-01
    • 2013-04-20
    • 2021-07-11
    • 2021-06-05
    • 2011-09-15
    • 1970-01-01
    • 2017-10-14
    • 2014-06-20
    相关资源
    最近更新 更多