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'
见
这里,
-第1组(后面用RHS中的([0-9]+)
占位符,替换模式表示):一个或多个数字\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'