原来sed不支持非贪婪匹配

2022/9/15 23:20:07

本文主要是介绍原来sed不支持非贪婪匹配,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

场景

从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


这篇关于原来sed不支持非贪婪匹配的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程