场景

从GISAID上面批量下载下来的序列id很长,格式如下:

太长了,并且makeblastdb的时候-parse_seqids参数会导致报错,大概是长度太长不符合要求无法处理之类的。
不作处理去掉-parse_seqids也没问题,不过怕后期引起不必要的麻烦,这个时候就需要处理一下这些id

sed

想着直接sed处理一下就好,因为有两个“|”存在,结果发现sed没法做到非贪婪……

grep '>' ../gisaid.fasta|sed s/hMpxV.*?\|//g|less

没效果啊~
添加-r用扩展的正则也没用~
看help,sed也没有-p参数……


原来sed并不支持“非贪婪”的正则,有地方是这么解释的:
https://www.codenong.com/40117611/
https://qa.1r1g.com/sf/ask/2808232801/
大概就是说非贪婪匹配是通过perl的PCRE引入主流的,而sed的规范比PCRE早了好几年……
有点难以令人信服……


解决

不支持就绕道吧,不要中间有“|”就得了

grep '>' ../gisaid.fasta|sed s/hMpxV[^\|]*\|//g|less

就这样吧

sed -i s/hMpxV[^\|]*\|//g gisaid.fasta
sed -i s/\|.*//g gisaid.fasta
 posted on 2022-09-15 11:46  Jianmx  阅读(366)  评论(0编辑  收藏  举报