首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用newick格式编辑系统发育树中的名称

用newick格式编辑系统发育树中的名称
EN

Unix & Linux用户
提问于 2018-10-11 21:48:44
回答 1查看 250关注 0票数 1

我有一个newick格式的系统发育树,我想删除分类群名称的一些片段,

代码语言:javascript
复制
1_[genus_specie_1]_characters:0.2654682758,(((((((((((((((2_[genus_specie_2]_characters:0.0379334280,54_[genus_specie_2]_characters:0.0605802067)/1/100:0.0121248674,(3_[genus_specie_3]_characters:0.0206432295,4_[genus_specie_4]_characters:0.0141250479)/1/100:0.0647820408)/1/100:0.0235327264,30_[genus_specie_5]_characters

例如,我想从方括号中删除这些片段。

代码语言:javascript
复制
genus_specie_1:0.2654682758,(((((((((((((((genus_specie_2:0.0379334280,genus_specie_2:0.0605802067)/1/100:0.0121248674,(genus_specie_3:0.0206432295,genus_specie_4:0.0141250479)/1/100:0.0647820408)/1/100:0.0235327264,genus_specie_5

我尝试用一个liner删除所有方括号。

代码语言:javascript
复制
perl -i -pe 'y/[]//d' file.nwk

我也尝试过使用下一个sed命令

代码语言:javascript
复制
sed 's/[[:alnum:]_]*\[\([[:alnum:]_]*\)\][[:alnum:]_]*/\1/g' 

但这不管用

EN

回答 1

Unix & Linux用户

发布于 2018-10-11 22:46:11

perl正则表达式在这里很好:

代码语言:javascript
复制
$ initial='1_[genus_specie_1]_characters:0.2654682758,(((((((((((((((2_[genus_specie_2]_characters:0.0379334280,54_[genus_specie_2]_characters:0.0605802067)/1/100:0.0121248674,(3_[genus_specie_3]_characters:0.0206432295,4_[genus_specie_4]_characters:0.0141250479)/1/100:0.0647820408)/1/100:0.0235327264,30_[genus_specie_5]_characters'
$ expected='genus_specie_1:0.2654682758,(((((((((((((((genus_specie_2:0.0379334280,genus_specie_2:0.0605802067)/1/100:0.0121248674,(genus_specie_3:0.0206432295,genus_specie_4:0.0141250479)/1/100:0.0647820408)/1/100:0.0235327264,genus_specie_5'

$ result=$( perl -pe 's/\d+_\[(.+?)\]_.*?(?=:|$)/$1/g' <<<"$initial" )

$ [[ $result = $expected ]] && echo yes
yes

这使用了非贪婪的量词(.*?)和前瞻性((?=:|$))。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/474927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档