如何使用Linux命令在Fasta文件中提取标题的一部分

时间:2015-09-21 09:01:57

标签: regex linux vim

我有一个带有唯一标头的Fasta文件,我想通过在Unix中使用正则表达式来提取此标头的一部分。

例如My Fasta文件以此标题开头:

Amount=GoldWeight*GoldRate; // TOP DOWN APPROACH
GoldWeight=Amount/GoldRate; // BOTTOM UP APPROACH

我想提取这个标题的最后一部分,如:

>jgi|Penbr2|47586|fgenesh1_pm.1_#_25  

实际上我在vim编辑器中使用这个正则表达式,但它不起作用:

>fgenesh1_pm.1_#_25

:%s/^([^|]+\|){3}//g

如果给我一些建议,我会合适的。

2 个答案:

答案 0 :(得分:3)

您可以使用sed

sed -e 's/>.*|/>/' fasta-file

即。 >|之间的所有内容都被>替换。

答案 1 :(得分:3)

我不知道领先的>是否也是您文字的一部分。假设它们不是。

由于您使用vim进行了标记,因此我只发布了vim解决方案。

你可以使用正则表达式的“贪婪”:

在vim中:

%s/.*|//

将离开最后一部分,这是最简单的方法。

在vim中,您也可以使用\zs, \zenon-greedy匹配:

%s/\zs.\{-}\ze[^|]\+$//

当然,如果您喜欢分组,可以使用\(...\)进行分组,不要使用\zs \ze

在您的代码中,您只使用(...)进行分组而不进行转义。我不知道你是如何在你的vimrc中配置你的magic设置的,如果你使用默认设置,你必须逃避( and )以赋予它们特殊的含义(在这里分组)。就像我们对BRE的做法一样。做一个:h magic,找到表格来了解差异。

在vim中:h terms获取详细信息。