我想删除以下数据的-5p部分:
[1] mmu-miR-322-5p mmu-miR-10b-5p mmu-miR-10a-5p
我尝试了这个gsub(".-5p","",data)
但是它带走了超过5p
答案 0 :(得分:2)
.
也会匹配前面的字符。即,您的正则表达式.-5p
将匹配输入向量中的2-5p
,b-5p
,a-5p
。由于字符串-5p
位于最后,因此您可以在$
之后使用行锚-5p
的结尾。请注意,它只会删除最后一个-5p
。如果它出现在中间或最初,那么它就不会做任何事情。
sub("-5p$","",data)
示例:
> s <- c("mmu-miR-322-5p", "mmu-miR-10b-5p", "mmu-miR-10a-5p")
> s
[1] "mmu-miR-322-5p" "mmu-miR-10b-5p" "mmu-miR-10a-5p"
> sub("-5p$","", s)
[1] "mmu-miR-322" "mmu-miR-10b" "mmu-miR-10a"
答案 1 :(得分:1)
在正则表达式实现中,点.
是具有特殊含义的元字符。单独地,它将匹配除换行序列之外的任何单个字符,因此它会按预期移除额外字符。
由于您在每个向量元素中都出现-5p
,因此sub
就是您需要的所有内容。
> x <- c('mmu-miR-322-5p', 'mmu-miR-10b-5p', 'mmu-miR-10a-5p')
> sub('-5p', '', x)
# [1] "mmu-miR-322" "mmu-miR-10b" "mmu-miR-10a"
答案 2 :(得分:1)
你甚至可以在perl one liner中使用替换运算符,并使用slurping从输入文件中去除所有情况下的-5p:
Perl One班轮代码:
perl -0777 -lne "if($_ =~ s/-5p//isg) { print $_;} else { print $_;}" InputFile